用无重复的JQ扁平化JSON结构 [英] Flatten JSON structure with jq without duplicates

查看:24
本文介绍了用无重复的JQ扁平化JSON结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从这个结构开始:

[{
    "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[]时,结果都会相乘,导致许多重复项。我如何才能避免这种情况,并且只获得所需的结果?

before[1][2][3][4]....向推荐答案

提出了许多类似的问题如下所示,您需要避免多次扩展同一数组,以防止组合爆炸。

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

Online demo

这篇关于用无重复的JQ扁平化JSON结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆