[英]Use JQ to parse JSON nested objects, using select to match key-value in nested object while showing existing structure
[英]Use JQ to parse JSON array of objects, using select to match specified key-value in the object element, then convert to CSV
使用 JQ 解析 JSON 对象数组,使用 select 匹配 object 元素中的指定键值,然后转换为 object 元素,然后转换为 select 元素,然后转换为 object 元素
数据源:
{
"Other": [],
"Objects": [
{
"ObjectElementName": "Test 123",
"ObjectElementArray": [],
"ObjectElementUnit": "1"
},
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
},
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
],
"Language": "en-US"
}
JQ命令解压
jq -r '.Objects[] | select(.ObjectElementName | contains("ABC"))'
Output 给定(仅单个对象,无 JSON 结构)...
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
}
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
Output 需要这种格式(在对象上方保留 JSON 数组)
{
"Other": [],
"Objects": [
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
},
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
],
"Language": "en-US"
}
Output需要这种格式,所以可以执行CSV转换
in2csv -f json --key Objects > output.csv
需要 Output CSV
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
如果你想要 CSV,你可能应该使用 jq 的@csv
过滤器,它基本上保证了有效的 CSV output。 例如,使用您的输入:
jq -r '
["ObjectElementName","ObjectElementUnit"],
(.Objects[]
| select(.ObjectElementName | test("ABC"))
| [.ObjectElementName,.ObjectElementUnit] )
| @csv' input.json
产生:
"ObjectElementName","ObjectElementUnit"
"Test ABC 1","2"
"Test ABC 2","5"
但是,如果您愿意冒险,可以将@csv
替换为join(",")
,在本例中会导致:
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.