Try : Array[index_of_object].property = value
for example : array[0].a = 1
извините, я не думаю, что это сработает, это делает что-то совершенно другое IIUC.
Используя reduce
, без разборки/пересборки ввода:
reduce range(length) as $index (.; .[$index] += {$index})
Сохраните структуру в переменной, затем используйте keys
, чтобы получить индексы, извлеките соответствующий объект из переменной с помощью индекса и добавьте к нему индекс:
jq '[ . as $d | keys[] | $d[.] + {index:.} ]' file.json
keys
требует построения массива, поэтому использование range(0;length)
здесь было бы более эффективным и потенциально гораздо более эффективным.
to_entries
принимает объект и возвращает массив пар ключ/значение.
Его можно использовать эффективно и интуитивно.
// file.json
[
{
"a": 1
},
{
"a": 2
},
{
"a": 7
}
]
jq 'to_entries | map(.value+{index:.key})' file.json
[
{
"a": 1,
"index": 0
},
{
"a": 2,
"index": 1
},
{
"a": 7,
"index": 2
}
]
Вот также альтернативное (не jq) решение с использованием jtc
:
bash $ <input.json jtc -w'[:]<I>k' -i'{"index":{I}}'
[
{
"a": 1,
"index": 0
},
{
"a": 2,
"index": 1
},
{
"a": 7,
"index": 2
}
]
bash $
PS. Я разработчик jtc
- процессора unix JSON
ППС. Отказ от ответственности требуется SO.
На этот вопрос есть другие ответы на stackoverflow.com/questions/24528256/…