Jq

jq 操作後返回完整結果

  • June 19, 2017

我正在向 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" }' < ...

在任何一種情況下,它都會將目前值(.您開始時的值)替換為將您描述的更改應用於您選擇的元素的結果。該新值通過管道進行,在這種情況下立即到輸出級。

引用自:https://unix.stackexchange.com/questions/371930