使用jq如何用其他东西替换键的名称

use*_*731 12 json key edit jq

这应该很容易......我想重命名几个键(理想情况下用jq),不管我做什么似乎都是错误的.示例json如下:

[
 {
  "fruit": "strawberry",
  "veg": "apple",
  "worker": "gardener"
 }
]
Run Code Online (Sandbox Code Playgroud)

我想将veg键重命名为fruit2(或者示例,无论什么是最简单的)以及作业的工作键.

我意识到这在sed中是可能的,但我正试图掌握jq :)

Rom*_*est 10

首先,有效的JSON应如下所示:

jq '[.[] | .["fruit2"] = .veg | .["job"] = .worker | del(.veg, .worker)]' file
Run Code Online (Sandbox Code Playgroud)

使用以下jq方法:

[
  {
    "fruit": "strawberry",
    "fruit2": "apple",
    "job": "gardener"
  }
]
Run Code Online (Sandbox Code Playgroud)

输出:

jq '[.[] | .["fruit2"] = .veg | .["job"] = .worker | del(.veg, .worker)]' file
Run Code Online (Sandbox Code Playgroud)

  • 或者使用地图,`jq 'map(.fruit2 = .veg | .job = .worker | del(.veg, .worker))' file` (6认同)

pea*_*eak 7

键(:-)是with_entries。例如,给定一个对象:

with_entries(if .key == "veg" then .key = "fruit2" else . end)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,由于您有一个对象数组,因此可以将以上内容包装在中map( ... )

  • 一种方法是将参数扩展到 with_entries,例如 with_entries( if .... end | if ... end) (3认同)