【问题标题】:Flatten JSON structure with jq without duplicates用 jq 展平 JSON 结构,不重复
【发布时间】:2020-11-25 11:04:24
【问题描述】:

我从这个结构开始:

[{
    "experiment": "ex1",
    "models": [{
        "name": "model1",
        "reference": 0.1,
        "code": [{
            "name": "foo",
            "version": "a",
            "value": 0.2
        },{
            "name": "foo",
            "version": "b",
            "value": 0.2
        },{
            "name": "bar",
            "version": "a",
            "value": 0.15
        }]
    },{
        "name": "model2",
        "reference": 0.12,
        "code": [{
            "name": "foo",
            "version": "a",
            "value": 0.09
        },{
            "name": "baz",
            "version": "a",
            "value": 0.15
        }]
    }]
}]

我想要这样的结果:

{
  "model": "model1",
  "code": "foo",
  "version": "a"
}
{
  "model": "model1",
  "code": "foo",
  "version": "b"
}
{
  "model": "model1",
  "code": "bar",
  "version": "a"
}
{
  "model": "model2",
  "code": "foo",
  "version": "a"
}
{
  "model": "model2",
  "code": "baz",
  "version": "a"
}

所以我写了以下查询。

.[] | { "model": .name, "code": .code[].name, "version": .code[].version }

问题在于,在输出结构中每次使用.code[],结果都会相乘,导致很多重复。我怎样才能避免这种情况,只得到想要的结果?

【问题讨论】:

    标签: json jq


    【解决方案1】:

    之前有人问过很多类似的问题[1][2][3][4]...。您需要避免多次扩展同一个数组,如下所示,以防止组合爆炸。

    .[].models[] | {model: .name} + (.code[] | {name, version})
    

    Online demo

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      相关资源
      最近更新 更多