# #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. Мой плохой Майк. Извините за оплошность. Да, вы правы, я все испортил. /Еще раз спасибо за помощь.