web-dev-qa-db-ja.com

jq:複数の値を変更する

この行で複数のjson値を変更しようとしています

 jq '.two="newval", .three="newval"' my.json 

これが入力です

{
  "one": {
    "val": 1
  },
  "two": "val",
  "three": "val",
  "four": "val"
}

しかし、出力は2jsonsです。

{
  "one": {
    "val": 1
  },
  "two": "newval",
  "three": "val",
  "four": "val"
}
{
  "one": {
    "val": 1
  },
  "two": "val",
  "three": "newval",
  "four": "val"
}

複数の値を変更して1つのアイテムに出力するにはどうすればよいですか?

8
OrangePot

+オブジェクトの追加 を使用して複数のメンバーを更新するメソッドを次に示します。

. + {two:"newtwo", three:"newthree"}

サンプル実行(data.jsonのデータを想定)

$ jq -M '. + {two:"newtwo", three:"newthree"}' data.json
{
  "one": {
    "val": 1
  },
  "two": "newtwo",
  "three": "newthree",
  "four": "val"
}

jqplay.orgでオンラインで試してください

5
jq170727

カンマをパイプ文字に変更するだけで完了です。

.two="newval" | .three="newval"

「、」はストリームを連結するためのものです:A,BはAに続いてBを放出します。

19
peak