쉘 변수에 json 객체가 저장되어 있습니다 json
.
{
"name": "foo",
"array": [
{
"name": "bar",
"thing": true
},
{
"name": "baz",
"thing": false
}
]
}
.new_key
array
나는 다음을 할 수 있습니다 :
$ jq '.array[] + {"new_key": 0}' <<<"$json"
{
"name": "bar",
"thing": true,
"new_key": 0
}
{
"name": "baz",
"thing": false,
"new_key": 0
}
그러나 이는 전체 객체가 아닌 배열의 배열만 반환합니다. 변수를 제자리에서 수정하거나 전체 개체를 반환하려면 어떻게 해야 합니까?
답변1
$ jq '.array[] += { new_key: 0 }' <<<"$json"
{
"name": "foo",
"array": [
{
"name": "bar",
"thing": true,
"new_key": 0
},
{
"name": "baz",
"thing": false,
"new_key": 0
}
]
}
즉, 배열을 추출하여 추가하는 +=
것이 +
아니라 수정하고 싶습니다.
또는 표현식의 키를 하드코딩하려면 jq
명령줄에 값을 전달하세요.
jq --argjson newval "$somevalue" '.array[] += { new_key: $newval }' <<<"$json"
또는 더 간결하게 다음을 사용하십시오 $ARGS.named
.
jq --argjson new_key "$somevalue" '.array[] += $ARGS.named' <<<"$json"
추가하는 값이 문자열인 경우 --argjson
just 로 변경합니다.--arg