json 객체에 키/값 추가

json 객체에 키/값 추가

쉘 변수에 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
}

그러나 이는 전체 객체가 아닌 배열의 배열만 반환합니다. 변수를 제자리에서 수정하거나 전체 개체를 반환하려면 어떻게 해야 합니까?

답변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"

추가하는 값이 문자열인 경우 --argjsonjust 로 변경합니다.--arg

관련 정보