Как прочитать ответ awscli в сценарии оболочки

Хотите прочитать «Элементы» из ответа AWS CLI. и хотите написать «для цикла» в «Предметах». Но я не могу сделать это в сценарии оболочки. Формат вывода команды AWS cli — формат JSON.

Код Ш:

[ ~]$ response_scan=`aws dynamodb scan --table-name recovery-plan --max-items 10 --attributes-to-get '["job_id", "job_type", "launch_category"]'`


[ ~]$ echo $response_scan
{ 
   "Count": 166, 
   "Items": [ 
        { "launch_category": { "S": "TOT" }, "job_type": { "S": "TEST" }, "job_id": { "S": "39504214122e" } }, 
        { "job_type": { "S": "TEST" }, "job_id": { "S": "8c48-914d0aa2a186" } },  
         { "job_type": { "S": "TEST" }, "job_id": { "S": "cbd07892491d" } }, 
         { "job_type": { "S": "TEST1" }, "job_id": { "S": "7afef48b0283" } },  
         { "job_type": { "S": "TEST" }, "job_id": { "S": "7d678fab68e1" } } 
     ], 
    "NextToken": "eyJFasasaseGNsdXasasaslX2Ftb3VudCasasI6IDEwfQ= = ",
     "ScannedCount": 166, 
     "ConsumedCapacity": null 
}

Может ли кто-нибудь помочь мне перебрать response_scan["Items"] ?

Что я делаю именно: Я хочу добавить поле - launch_category к элементам/строкам, в которых нет этого поля. Значение launch_category равно TOT для TEST и TOT1 для TEST1.

Что вы подразумеваете под "перебирать"? Что вы будете делать с каждым значением?

John Rotenstein 19.02.2019 23:26

@JohnRotenstein: я хочу обновить элементы, у которых нет поля launch_category.

Vivek Sable 20.02.2019 04:20

Обновление элементов из сценариев оболочки несколько запутано. Рассматривали ли вы вместо этого использование такого языка, как Python? Это даст вам гораздо больше контроля благодаря встроенной обработке JSON.

John Rotenstein 20.02.2019 04:28

@JohnRotenstein: Да, я знаю из Python (boto3). Это легко. но попробуй сделать в скрипте shell/bash.

Vivek Sable 20.02.2019 06:07
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
2
4
1 464
2

Ответы 2

response_scan=$(aws dynamodb scan --table-name recovery-plan --max-items 10 --attributes-to-get '["job_id", "job_type", "launch_category"]' --query Items[].job_type.S --output text )

Или вы можете использовать jq для разбора json — https://stedolan.github.io/jq/

Приведенный выше ответ все еще работает, обновление здесь в соответствии с документацией AWS рекомендуется с использованием --projection-expression вместо --attribute-to-get.

--attributes-to-get (list)

This is a legacy parameter. Use ProjectionExpression instead. For more information, see AttributesToGet in the Amazon DynamoDB Developer Guide .

response_scan=$(aws dynamodb scan 
--table-name recovery-plan 
--max-items 10 
--projection-expression "job_id, job_type,launch_category" 
--query Items[].job_type.S --output text 
)

AttributesToGet

Другие вопросы по теме