Tenho um objeto JSON enorme com um array de objetos dentro dele. Tenho que adicionar o par chave:valor a um objeto específico no array. Por exemplo, deixe o objeto de entrada ser:
{
"a": {
"b": [
{
"name": "name1",
"value": 1,
"param": {
"p1": "par1"
}
},
{
"name": "name2",
"value": 2,
"param": {
"p1": "par2"
}
},
{
"name": "name3",
"value": 3,
"param": {
"p1": "par3"
}
}
],
"c": 4,
"d": 5
}
}
Usando o índice a modificação é fácil:
jq '.a.b[0].param += {new: "QQQ"}'
Mas não posso ter 100% de certeza do índice. Tenho que especificar o objeto com a tag name .name == "name1"
.
Como modificar um objeto identificado por etiqueta de nome?
Não sei qual é a melhor maneira de fazer isso, mas você pode fazer:
Parece natural fazer a seleção do elemento a ser atualizado usando
select()
e, em seguida, usarmap()
para mapear a seleção e a atribuição a todos os elementos dob
subarray:ou, mais curto
Ou você pode escolher todas as
param
entradas dos elementos dob
array e atualizá-las. Isso seria mais próximo do seu próprio comando que atualiza o primeiro elemento deb
incondicionalmente:ou, mais curto,