jqを使用して特定の行の前にjsonチャンクを追加する

jqを使用して特定の行の前にjsonチャンクを追加する

すでにjsonファイルがあり、jqを使用してファイルを開いて編集したいシナリオがあります。

jsonファイル(temp.json):

{
  "a":{
    "keya" : "abc",
    "keyb" : "xyz"
  },
  "c":{
    "keyc" : "yyy"
  }
}

cここでは、検索を通じてブロックの前に別のjsonオブジェクトを追加したいと思います。デフォルトでは、最後のオブジェクトの前に値を追加します。この場合、最後のオブジェクトは常にc

  "b":{
    "keyb" : "yop"
  }

私はjqを使用して挿入ブロックを実装しましたが、目的の場所に挿入されませんでした。 jq '. |= . + {"b":{ "keyb" : "yop" }}' temp.json

どんな助けでもいいでしょう。

ベストアンサー1

jqキーをソートするために使用できるオプション-S。例えば

$ jq -S '. |= . + {"b":{ "keyb" : "yop" }}' temp.json
{
  "a": {
    "keya": "abc",
    "keyb": "xyz"
  },
  "b": {
    "keyb": "yop"
  },
  "c": {
    "keyc": "yyy"
  }
}

おすすめ記事