Json

將鍵/值添加到 json 對象

  • January 12, 2021

我有一個儲存在 shell 變數中的 json 對象json

{
   "name": "foo",
   "array": [
       {
           "name": "bar",
           "thing": true
       },
       {
           "name": "baz",
           "thing": false
       }
   ]
}

我想new_keyarray. 我可以執行以下操作:

$ jq '.array[] + {"new_key": 0}' <<<"$json"
{
 "name": "bar",
 "thing": true,
 "new_key": 0
}
{
 "name": "baz",
 "thing": false,
 "new_key": 0
}

但是,這只返回數組數組而不是整個對象。我怎樣才能修改變數或返回整個對象?

$ jq '.array[] += { "new_key": 0 }' <<<"$json"
{
 "name": "foo",
 "array": [
   {
     "name": "bar",
     "thing": true,
     "new_key": 0
   },
   {
     "name": "baz",
     "thing": false,
     "new_key": 0
   }
 ]
}

也就是說,使用+=代替+. 您想要修改array數組,而不是提取它並添加到它。

如果您要添加的數據來自可能需要 JSON 編碼的 shell 變數($somevalue如下),那麼您可以使用它jo來生成您添加的 JSON 片段:

jq --argjson newval "$( jo new_key="$somevalue" )" '.array[] += $newval' <<<"$json"

或者,如果您只想傳遞值並對jq錶達式中的鍵進行硬編碼:

jq --arg newval "$somevalue" '.array[] += { new_key: $newval }' <<<"$json"

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