繁体   English   中英

使用 jq 递归替换键值对

[英]Replace recursively key value pair using jq

我在文件 one.json 中有以下 json 内容。

[{
    "session": "One",
    "name": "First Session",
    "details": [
        {
            "name": "Session One"
        }
    ]
},
{
    "session": "Two",
    "name": "Second Session",
    "details": [
        {
            "name": "Session Two"
        }
    ]
}]

我想用下面的 output 创建另一个 json 文件 two.json

[{
    "session": "One",
    "name": "Session One",
    "details": [
        {
            "name": "Session One"
        }
    ]
},
{
    "session": "Two",
    "name": "Session Two",
    "details": [
        {
            "name": "Session Two"
        }
    ]
}]

文件一和文件二的区别在于,“name”的值在每个实例中递归地替换为 details[0].name。 不幸的是,由于一些限制,我只能使用“jq”来实现这一点。 我是 shell 脚本世界的新手,这个脚本真的让我很烦。

map(.name = .details[0].name)
  1. Map 通各 object
  2. name键设置为details数组中第0个索引的name

结果:

[
  {
    "session": "One",
    "name": "Session One",
    "details": [
      {
        "name": "Session One"
      }
    ]
  },
  {
    "session": "Two",
    "name": "Session Two",
    "details": [
      {
        "name": "Session Two"
      }
    ]
  }
]

Jq▶玩


将jq的output保存到新的json文件中;

jq 'map(.name = .details[0].name)' tst.json > 'newjson.json'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM