使用JQ解析JSON对象数组,使用select匹配对象元素中指定的key-value,然后转换为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匹配对象元素中的指定键值,然后转换为CSV。
数据来源:
{
"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"))'
给定输出(仅单个对象,无JSON结构)...
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
}
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
需要这种格式的输出(保留对象上方的 JSON 数组)
{
"Other": [],
"Objects": [
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
},
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
],
"Language": "en-US"
}
需要以这种格式输出,所以可以执行CSV转换
in2csv -f json --key Objects > output.csv
需要输出 CSV
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
如果你想要 CSV,你应该使用 jq 的 @csv
过滤器,它基本上保证了有效的 CSV 输出。例如,使用您的输入:
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
使用JQ解析JSON对象数组,使用select匹配对象元素中的指定键值,然后转换为CSV。
数据来源:
{
"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"))'
给定输出(仅单个对象,无JSON结构)...
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
}
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
需要这种格式的输出(保留对象上方的 JSON 数组)
{
"Other": [],
"Objects": [
{
"ObjectElementName": "Test ABC 1",
"ObjectElementArray": [],
"ObjectElementUnit": "2"
},
{
"ObjectElementName": "Test ABC 2",
"ObjectElementArray": [],
"ObjectElementUnit": "5"
}
],
"Language": "en-US"
}
需要以这种格式输出,所以可以执行CSV转换
in2csv -f json --key Objects > output.csv
需要输出 CSV
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
如果你想要 CSV,你应该使用 jq 的 @csv
过滤器,它基本上保证了有效的 CSV 输出。例如,使用您的输入:
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