【问题标题】:jq create unique keys from json duplicatesjq 从 json 重复项创建唯一键
【发布时间】:2021-06-21 08:38:10
【问题描述】:

我正在尝试转换一个 json 文件,在提取我需要的内容后它看起来像这样:

{
  "title": "title 1",
  "description": "desc 1",
  "message": "msg 1",
  "region": "region 1",
  "resource": "resource 1"
}
{
  "title": "title 1",
  "description": "desc 1",
  "message": "msg 1",
  "region": "region 2",
  "resource": "resource 2"
}

我想把它变成

{
  "title": "title 1",
  "description": "desc 1",
  "message": "msg 1",
  "data": [
           {"region 1":"resource 1"},
           {"region 2":"resource 2"}
          ]
}

我的想法是转换 json 并使重复的标题、描述、消息唯一(从而删除重复项),同时将不断变化的区域和资源保留为数据对象。

我试过 group_by(.title) 它给了我一个错误“无法用字符串“title”索引字符串,我想做 group_by(.title,.description,.message)。

我尝试了 unique_by 也得到了错误。

我当前的查询是

jq '.[] | {title : .title, description : .description, message : .message, data: [{region: .region, resource: .resource}] } | group_by(.title,.description,.message)'

【问题讨论】:

  • {"region 1","resource 1" } 没有意义,你有一个对象大括号,但里面有一个列表。
  • 谢谢你是对的,我会有一个字典列表,键是区域 1,区域 2,值是资源 1,资源 2。已更改。

标签: json jq


【解决方案1】:
jq -s '[.[]
        | { title : .title,
            description : .description,
            message : .message,
            data: [{region: [.region], resource: [.resource]}]
          }
       ]
       | group_by(.title, .descripiton, .message)
       | .[]
       | { title: .[0].title,
           description: .[0].description,
           message: .[0].message,
           data:{
               region: [.[].data[].region | add],
               resource: [.[].data[].resource | add]
           }}'

【讨论】:

  • 谢谢你不确定你的代码发生了什么,但它给了我这个错误'Cannot index string with string "title" '
【解决方案2】:

以下是@choroba 程序的简洁变体,可能会引起人们的兴趣,因为它将保留 JSON 对象的所有键,除了要合并的两个键:

map( . + {data: [{region: [.region], resource: [.resource]}]}
     | del(.region, .resource) )
| group_by(.title, .description, .message)[]
| .[0] +
    { data: {
        region:   [.[].data[].region   | add],
        resource: [.[].data[].resource | add]
      }
    }

它当然也应该与 -s 命令行选项一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2021-06-22
    相关资源
    最近更新 更多