Команда Unix для фильтрации JSON - PullRequest
0 голосов
/ 18 октября 2018
[
   {
      "name":"sandboxserver.tar.gz.part-aa",
      "hash":"010d126f8ccf199f3cd5f468a90d5ae1",
      "bytes":4294967296,
      "last_modified":"2018-10-10T01:32:00.069000",
      "content_type":"binary/octet-stream"
   },
   {
      "name":"sandboxserver.tar.gz.part-ab",
      "hash":"49a6f22068228f51488559c096aa06ce",
      "bytes":397973601,
      "last_modified":"2018-10-10T01:32:22.395000",
      "content_type":"binary/octet-stream"
   },
   {
      "name":"sandboxserver.tar.gz.part-ac",
      "hash":"2c5e845f46357e203214592332774f4c",
      "bytes":5179281858,
      "last_modified":"2018-10-11T08:20:11.566000",
      "content_type":"binary/octet-stream"
   }
]

Я получаю выше JSON в качестве ответа при перечислении объектов в облачном хранилище объектов с использованием curl -l -X GET.Как я могу получить объект "имя", назначенный массиву при цикле по всем объектам.например

array[1]="sandboxserver.tar.gz.part- aa"
array[2]="sandboxserver.tar.gz.part- ab"
array[3]="sandboxserver.tar.gz.part- ac"

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Если вы не хотите зависеть от внешней утилиты, такой как jq, используйте команду python + bash combo.

response="$(cat data.json)"
declare -a array
array=($(python -c "import json,sys; data=[arr['name'] for arr in json.loads(sys.argv[1])]; print('\n'.join(data));" "$response"))

echo "${array[@]}"

Совет: написание встроенного кода Python может скоро стать нечитаемым, так что вы можетехочу поместить код Python в отдельный скрипт и запустить скрипт.

0 голосов
/ 18 октября 2018

Вы можете использовать jq.

jq is a powerful tool that lets you read, filter, and write JSON in bash.

Возможно, вам придется сначала установить его.

Попробуйте:

Я вставил ваш json в файл:

~$ cat n1.json
[  
   {  
      "name":"sandboxserver.tar.gz.part-aa",
      "hash":"010d126f8ccf199f3cd5f468a90d5ae1",
      "bytes":4294967296,
      "last_modified":"2018-10-10T01:32:00.069000",
      "content_type":"binary/octet-stream"
   },
   {  
      "name":"sandboxserver.tar.gz.part-ab",
      "hash":"49a6f22068228f51488559c096aa06ce",
      "bytes":397973601,
      "last_modified":"2018-10-10T01:32:22.395000",
      "content_type":"binary/octet-stream"
   },
   {  
      "name":"sandboxserver.tar.gz.part-ac",
      "hash":"2c5e845f46357e203214592332774f4c",
      "bytes":5179281858,
      "last_modified":"2018-10-11T08:20:11.566000",
      "content_type":"binary/octet-stream"
   }
]

И затем использовал jq, чтобы найти имена:

~$ jq -r '.[].name' n1.json
sandboxserver.tar.gz.part-aa
sandboxserver.tar.gz.part-ab
sandboxserver.tar.gz.part-ac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...