web-dev-qa-db-ja.com

jqを使用して、キーの名前を別の名前に置き換える方法

これは十分に簡単なはずです...いくつかのキーの名前を変更したい(理想的にはjqを使用)。以下はjsonの例です。

[
 {
  "fruit": "strawberry",
  "veg": "Apple",
  "worker": "gardener"
 }
]

Vegキーの名前をfruit2(または例、最も簡単なもの)に変更し、workerキーをジョブに変更します。

これはsedで可能であることに気づきましたが、jqでグリップを取得しようとしています

15
user3229731

次のjqアプローチを使用します。

jq '[.[] | .["fruit2"] = .veg | .["job"] = .worker | del(.veg, .worker)]' file

出力:

[
  {
    "fruit": "strawberry",
    "fruit2": "Apple",
    "job": "gardener"
  }
]
10
RomanPerekhrest

キー(:-)はwith_entriesです。たとえば、単一のオブジェクトが与えられた場合:

_with_entries(if .key == "veg" then .key = "fruit2" else . end)
_

あなたの場合、オブジェクトの配列があるので、上記をmap( ... )でラップできます。

7
peak