Json 使用jq如何用其他名称替换密钥的名称

Json 使用jq如何用其他名称替换密钥的名称,json,key,jq,Json,Key,Jq,这应该很容易。。。我想重命名一些键(理想情况下使用jq),但我所做的一切似乎都是错误的。下面是一个json示例: [ { "fruit": "strawberry", "veg": "apple", "worker": "gardener" } ] 我想将veg键重命名为水果2(或示例,任何最简单的名称),还想将worker键重命名为job 我意识到这在sed中是可能的,但我正在努力掌握jq,关键(:-)是使用_条目。例如,给定单个对象: with_entries(if .ke

这应该很容易。。。我想重命名一些键(理想情况下使用jq),但我所做的一切似乎都是错误的。下面是一个json示例:

[
 {
  "fruit": "strawberry",
  "veg": "apple",
  "worker": "gardener"
 }
]
我想将veg键重命名为水果2(或示例,任何最简单的名称),还想将worker键重命名为job

我意识到这在sed中是可能的,但我正在努力掌握jq,关键(:-)是使用_条目。例如,给定单个对象:

with_entries(if .key == "veg" then .key = "fruit2" else . end)
在您的情况下,由于您有一个对象数组,因此可以使用以下jq方法将上述内容包装在
map(…)
中:

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

[
  {
    "fruit": "strawberry",
    "fruit2": "apple",
    "job": "gardener"
  }
]

这个很棒!如何处理多个键?一种方法是将参数扩展到with_条目,例如with_条目(if…end | if…end)