[英]Use JQ to parse JSON array of objects, using select to match specified key-value in the object element, then convert to CSV
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 元素
Data Source:数据源:
{
"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 command to extract JQ命令解压
jq -r '.Objects[] | select(.ObjectElementName | contains("ABC"))'
Output given (individual objects only, no JSON structure)... Output 给定(仅单个对象,无 JSON 结构)...
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
}
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
Output needed in this format (preserving the JSON array above the objects) Output 需要这种格式(在对象上方保留 JSON 数组)
{
"Other": [],
"Objects": [
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
},
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
],
"Language": "en-US"
}
Output needed in this format, so CSV conversion can be executed Output需要这种格式,所以可以执行CSV转换
in2csv -f json --key Objects > output.csv
Output CSV required需要 Output CSV
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
If you want CSV, you should probably use jq's @csv
filter, which essentially guarantees valid CSV output.如果你想要 CSV,你可能应该使用 jq 的
@csv
过滤器,它基本上保证了有效的 CSV output。 For example, using your input:例如,使用您的输入:
jq -r '
["ObjectElementName","ObjectElementUnit"],
(.Objects[]
| select(.ObjectElementName | test("ABC"))
| [.ObjectElementName,.ObjectElementUnit] )
| @csv' input.json
produces:产生:
"ObjectElementName","ObjectElementUnit"
"Test ABC 1","2"
"Test ABC 2","5"
However, if you're willing to take the risks, you could replace @csv
by join(",")
, which in the present case would result in:但是,如果您愿意冒险,可以将
@csv
替换为join(",")
,在本例中会导致:
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.