Jq
jq 操作後返回完整結果
我正在向 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 }, ... ] }
jq 基本上是一個過濾器,因此
.docs[0]
將腳本其餘部分可用的數據限制為它所選擇的數據。在程序結束時,輸出流中的任何內容。因此,+ { ... }
唯一看到的是一個對象,其輸出被用作整個程序的輸出。相反,如果您想修改您選擇的元素之一,請使用
+=
,它是更新賦值運算符|= . + ...
的別名:jq '.docs[1] += { "value": "value" }' < ...
您可以等效地編寫脫糖的
jq '.docs[1] |= . + { "value": "value" }' < ...
在任何一種情況下,它都會將目前值(
.
您開始時的值)替換為將您描述的更改應用於您選擇的元素的結果。該新值通過管道進行,在這種情況下立即到輸出級。