【问题标题】:jq: How to convert flat json into nested onejq:如何将平面 json 转换为嵌套的
【发布时间】:2018-01-21 21:43:47
【问题描述】:

我一直在尝试将一个非常扁平的 json 重新排列成更深入的结构,但到目前为止没有任何成功。这是我的源数据:

[ { "id": "27", "time": "2017-12-21 07:24:00", "service_name": "prices", "version": "61f4u8e", "event": "Success" }, { "id": "28", "time": "2017-12-21 07:23:00", "service_name": "prices", "version": "21c2f7d", "event": "Fail" }, { "id": "29", "time": "2017-12-21 07:21:00", "service_name": "cart", "version": "9ff24c4", "event": "Success" } ]

结果应该是这样的:

[ { "name": "cart", "data": [ { "date": "2017-12-21 07:21:00", "details": { "event": "Success", "version": "9ff24c4" } } ] }, { "name": "prices", "data": [ { "date": "2017-12-21 07:24:00", "details": { "event": "Success", "version": "61f4u8e" } }, { "date": "2017-12-21 07:23:00", "details": { "event": "Fail", "version": "21c2f7d" } } ] } ]

所以,基本上是按 service_name 分组并稍微移动其他字段。

到目前为止,我已经成功分组,但只有一个级别:

group_by(.service_name) | map({name: .[0].service_name, data: .}) 假设输入将始终包含上例中的所有字段,我该如何调整其他值?

【问题讨论】:

    标签: json nested jq


    【解决方案1】:

    jq解决方案:

    jq '[group_by(.service_name)[] 
        | .[0].service_name as $name 
        | { name: $name, 
            data: map({ date: .time, 
                        details: {event, version}}) 
          }]' jsonfile
    

    输出:

    [
      {
        "name": "cart",
        "data": [
          {
            "date": "2017-12-21 07:21:00",
            "details": {
              "event": "Success",
              "version": "9ff24c4"
            }
          }
        ]
      },
      {
        "name": "prices",
        "data": [
          {
            "date": "2017-12-21 07:24:00",
            "details": {
              "event": "Success",
              "version": "61f4u8e"
            }
          },
          {
            "date": "2017-12-21 07:23:00",
            "details": {
              "event": "Fail",
              "version": "21c2f7d"
            }
          }
        ]
      }
    ]
    

    【讨论】:

    • 非常感谢RomamPerekhrest。
    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多