将对象的值添加到数组的每个元素中

时间:2020-08-12 16:27:47

标签: json jq

我有一个看起来像这样的json对象:

{
    "data": {
        "id" : 1234,
        "details": [
            {
                "vid": "332",
                "long": -79,
                "lat": 45
            },
            {
                "vid": "33",
                "long": -77,
                "lat": 32
            }
        ]
    }
}

我想从如下数据中输出一个csv文件:

"1234","332","-79", "45"
"1234", "33", "-77", "32"

例如我想从另一个节点的数组对象中的每个节点中添加一些东西,实质上是对数据进行非规范化。

是否可以从json数据中的其他位置访问值?

2 个答案:

答案 0 :(得分:2)

或者没有变量:

jq -r '.data | [.id] + (.details[] | [.vid, .long, .lat]) | @csv' file.json

如果您真的希望所有值都被引用,只需在流水线的最后一个map(tostring)之前将@csv添加到管道中即可。

答案 1 :(得分:1)

您可以使用变量来做到这一点:

jq '.data.id as $id | .data.details[] | [$id, .vid, .long, .lat]' file.json