У меня есть вывод JSON, который содержит список объектов, хранящихся в переменной. (Я не могу выразить это право)
[
{
"item1": "value1",
"item2": "value2",
"sub items": [
{
"subitem": "subvalue"
}
]
},
{
"item1": "value1_2",
"item2": "value2_2",
"sub items_2": [
{
"subitem_2": "subvalue_2"
}
]
}
]
Мне нужны все значения для item2 в массиве, чтобы скрипт bash работал в Ubuntu 14.04.1.
Я нашел несколько способов получить весь результат в массив, а не только элементы, которые мне нужны
jq . <<< "$json"
это связано с оболочкой (bash), не специфично дляjq
arr=( $(...) )
jq
команда, но, пожалуйста, не разбирайте вывод команды в массив сarr=( $(...) )
(хотя это работает с примером ввода): она не работает так, как задумано, со встроенным или начальным / конечным пробелом и может привести к случайному сбою.Следующее действительно глючит:
Вместо этого используйте:
... или даже лучше ...
источник
Благодаря спутнику я дошел до этого:
У меня есть JSON - это выход из API. Все, что мне нужно было сделать - это удалить аргумент файла и
|
передать вывод curl в jq. Прекрасно работает и сохранил некоторые шаги.источник
*
- он будет заменен списком файлов в вашем текущем каталоге.item2
значение с пробелом в нем станет более чем одним элементом массива.в качестве простой альтернативы, посмотрите на
jtc
инструмент (на https://github.com/ldn-softdev/jtc ), чтобы добиться того же (как в примере с jq):Объяснение
-w
опции: угловые скобки<...>
определяют поиск по всему json, суффиксl
указывает на поиск меток, а не значений,+0
указывает на поиск всех вхождений (а не только первый).источник
arr=( $(jq ...) )
ответах, поскольку содержимое разбивается на строки и расширяется глобусом для заполнения массива - это означает, что пробелы (не только новые строки) создают новые элементы, а элементы, которые выглядят как выражение глобуса, заменяются файлами, которые выражения совпадают.