在jq中使用JSONpath语法,同时将JSON转换为CSV



我正试图将此JSON转换为CSV与某些条件。我的情况是"类型"。应该是"二级"。它应该显示类型为secondary的字段。cmd.

jq -r '["color","category","type"], ([?type=="secondary"].colors | [.color, .category, .type]) | @csv' test.json > test.csv
{
"colors": [
{
"color": "black",
"category": "hue",
"type": "primary",
"code": {
"rgba": [255,255,255,1],
"hex": "#000"
}
},
{
"color": "white",
"category": "value",
"code": {
"rgba": [0,0,0,1],
"hex": "#FFF"
}
},
{
"color": "red",
"category": "hue",
"type": "primary",
"code": {
"rgba": [255,0,0,1],
"hex": "#FF0"
}
},
{
"color": "blue",
"category": "hue",
"type": "primary",
"code": {
"rgba": [0,0,255,1],
"hex": "#00F"
}
},
{
"color": "yellow",
"category": "hue",
"type": "primary",
"code": {
"rgba": [255,255,0,1],
"hex": "#FF0"
}
},
{
"color": "green",
"category": "hue",
"type": "secondary",
"code": {
"rgba": [0,255,0,1],
"hex": "#0F0"
}
}
]
}

您所拥有的似乎是JSONPath语法(https://github.com/json-path/JsonPath),这在具有自己的DSL语法的jq中不适用

对于这个特定的情况,要根据条件进行过滤,您需要一个select语句

[ "color", "category", "type" ], 
( .colors[] | select( .type == "secondary" ) | [ .color, .category, .type] ) | @csv
<<p><一口>jqplay演示/一口>

最新更新