удаление записи из JSON с помощью powershell

# #json #powershell #google-cloud-platform

Вопрос:

Я использую BigQuery GCP. Я хочу удалить доступ кого-то. За https://cloud.google.com/bigquery/docs/dataset-access-controls#bq_1, я выполняю команду

    bq show 
--format=prettyjson 
project1:dataset1 > /tmp/myjson.json
 

и вот JSON, который я получаю

  {
  "access": [
    {
      "role": "WRITER",
      "specialGroup": "projectWriters"
    },
    {
      "role": "OWNER",
      "specialGroup": "projectOwners"
    },
    {
      "role": "OWNER",
      "userByEmail": "employee1@myco.com"
    },
    {
      "role": "READER",
      "specialGroup": "projectReaders"
    }
  ],
  "creationTime": "1528762487037",
  "datasetReference": {
    "datasetId": "dataset1",
    "projectId": "project1"
  },
  "description": "My Data",
  "etag": "<redacted>",
  "friendlyName": "dataset1",
  "id": "project1:dataset1",
  "kind": "bigquery#dataset",
  "lastModifiedTime": "1528762487037",
  "location": "US",
  "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/project1/datasets/dataset1"
}
 

Я новичок в powershell и пытаюсь удалить запись для employee1 и вернуть json для

 bq update 
 

команда по ссылке выше.
Любые идеи, как получить индекс записи.
Я попытался просто получить часть «доступ» json в виде объекта массива. Но задача состоит в том, чтобы найти индекс записи employee1, удалить этот элемент массива и поместить его обратно в json.

Любая помощь будет признательна.

Ответ №1:

Используя convertfrom-json командлет, вы получаете объект, который можно редактировать. Затем вы можете преобразовать его обратно с помощью convertto-json

 $x=@'
{
  "access": [
    {
      "role": "WRITER",
      "specialGroup": "projectWriters"
    },
    {
      "role": "OWNER",
      "specialGroup": "projectOwners"
    },
    {
      "role": "OWNER",
      "userByEmail": "employee1@myco.com"
    },
    {
      "role": "READER",
      "specialGroup": "projectReaders"
    }
  ],
  "creationTime": "1528762487037",
  "datasetReference": {
    "datasetId": "dataset1",
    "projectId": "project1"
  },
  "description": "My Data",
  "etag": "<redacted>",
  "friendlyName": "dataset1",
  "id": "project1:dataset1",
  "kind": "bigquery#dataset",
  "lastModifiedTime": "1528762487037",
  "location": "US",
  "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/project1/datasets/dataset1"
}
'@ | ConvertFrom-json
$x.Access=$x.Access.Where({$_.userByEmail -ne 'employee1@myco.com'})
$x | convertto-json
 

Комментарии:

1. Спасибо, Майк, это почти работает. Ваш код теперь дает мне только раздел доступа к json за вычетом employee1 (что здорово). Но теперь, как мне получить полный json (с другими разделами, такими как описание, etag и т. Д.

2. Когда я запускаю код, я получаю все. Вы уверены, что у вас $x на последней строке и нет $x.Access ?

3. Мой плохой Майк. Извините за оплошность. Да, вы правы, я все испортил. /Еще раз спасибо за помощь.