从嵌套数组中选择(Selecting from nested array)

编程入门 行业动态 更新时间:2024-10-24 17:27:04
嵌套数组中选择(Selecting from nested array)

鉴于此输入

{ "data": [ { "id": "001", "metadata": { "item1": 1 }, "records": [ { "name": "name1", "type": "type1" }, { "name": "name2", "type": "type2" } ] }, { "id": "002", "metadata": { "item1": 1 }, "records": [ { "name": "name1", "type": "type1" } ] }, { "id": "003", "metadata": {}, "records": [ { "name": "name1", "type": "type1" }, { "name": "name2", "type": "type2" } ] } ] }

我想输出这个

[ { "id": "001", "Item1": 1, "Name": "name2" }, { "id": "002", "Item1": 1, "Name": null }, { "id": "003", "Item1": null, "Name": "name2" } ]

但是使用这个

jq '[.data[] | {id, "Item1": .metadata.item1, "Name": .records[] | select(.type == "type2").name}]'

jq查询我得到了这个

[ { "id": "001", "Item1": 1, "Name": "name2" }, { "id": "003", "Item1": null, "Name": "name2" } ]

如何才能输出'002'id对象? 我已经尝试了各种if if else条件语句,但无济于事。

Given this input

{ "data": [ { "id": "001", "metadata": { "item1": 1 }, "records": [ { "name": "name1", "type": "type1" }, { "name": "name2", "type": "type2" } ] }, { "id": "002", "metadata": { "item1": 1 }, "records": [ { "name": "name1", "type": "type1" } ] }, { "id": "003", "metadata": {}, "records": [ { "name": "name1", "type": "type1" }, { "name": "name2", "type": "type2" } ] } ] }

I am trying to output this

[ { "id": "001", "Item1": 1, "Name": "name2" }, { "id": "002", "Item1": 1, "Name": null }, { "id": "003", "Item1": null, "Name": "name2" } ]

However using this

jq '[.data[] | {id, "Item1": .metadata.item1, "Name": .records[] | select(.type == "type2").name}]'

jq query I am getting this

[ { "id": "001", "Item1": 1, "Name": "name2" }, { "id": "003", "Item1": null, "Name": "name2" } ]

How can I get the '002' id object to output as well? I have tried various if then else conditions statements but to no avail.

最满意答案

我对jq很新,所以这可能不是最佳解决方案。

如果将select map到records数组,则不会删除周围的对象。 例如:

parse.jq

[ .data[] | { id : .id, Item1 : .metadata.item1, Name : .records | map(select(.type == "type2"))[0].name } ]

像这样运行:

jq -f parse.jq file.json

输出:

[ { "id": "001", "Item1": 1, "Name": "type2" }, { "id": "002", "Item1": 1, "Name": null }, { "id": "003", "Item1": null, "Name": "type2" } ]

I am quite new to jq so this is probably not an optimal solution.

If you map the select onto the records array instead, the surrounding object is not removed. For example:

parse.jq

[ .data[] | { id : .id, Item1 : .metadata.item1, Name : .records | map(select(.type == "type2"))[0].name } ]

Run it like this:

jq -f parse.jq file.json

Output:

[ { "id": "001", "Item1": 1, "Name": "type2" }, { "id": "002", "Item1": 1, "Name": null }, { "id": "003", "Item1": null, "Name": "type2" } ]

更多推荐

本文发布于:2023-08-07 02:42:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1458920.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   组中   Selecting   nested   array

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!