JSON 문자열에 속성을 추가하고 있습니다.
result=$(jq -c ".docs[$docIndex] + { \"value\": \"value\" }"<<<"$fileContent")
내부 JSON은 $fileContent
어디에 있습니까?
{
"docs": [
{
"id": 123
},
{
"id": 456
},
{
"id": 678
},
...
]
}
$result
하지만 수술 후 안에 있던 것은 {"id:123", "value":"value"}
. 전체 출력을 반환하는 방법은 무엇입니까? 내가 원하는 건 결과가
{
"docs": [
{
"id": 123,
"value": "value"
},
{
"id": 456
},
{
"id": 678
},
...
]
}
답변1
jq는 본질적으로 필터이므로 .docs[0]
스크립트의 나머지 부분에서 사용할 수 있는 데이터를 선택한 항목으로 제한합니다. 프로그램이 끝나면 스트림의 모든 내용이 출력됩니다. 따라서 + { ... }
하나의 개체만 표시되며 해당 출력은 전체 프로그램의 출력으로 사용됩니다.
네가 원한다면조정선택한 요소 중 하나,사용+=
, 이는 별칭입니다.할당 연산자 업데이트|= . + ...
:
jq '.docs[1] += { "value": "value" }' < ...
Desugarized를 동등하게 작성할 수 있습니다.
jq '.docs[1] |= . + { "value": "value" }' < ...
.
두 경우 모두 현재 값( 시작한 값)을 선택한 요소에 설명하는 변경 사항을 적용한 결과로 바꿉니다 . 이 새로운 값은 파이프라인을 통해 계속 실행되며, 이 경우 출력 단계에 즉시 도달합니다.