如何导出为 CSV 有条件?
How can I export to CSV with condition?
cat target.json | jq '.[] | select(.sex | endswith("female")) |@csv'
我尝试使用上面的代码输出 csv 条件,其中只列出了女孩。
"target.json"
[
{
"name": "Mike",
"age": "15",
"sex": "male"
},
{
"name": "Dan",
"age": "10",
"sex": "male"
},
{
"name": "Kasia",
"age": "5",
"sex": "female"
}
]
但是创建失败并显示此错误代码。
jq: error (at <stdin>:0): object ({"sex":"...) cannot be csv-formatted, only array
谁能告诉我怎么做?
jq -r '
.[]
| select(.sex | endswith("female"))
| to_entries
| map(.value)
| @csv
' target.json
to_entries 至:
[
{
"key": "name",
"value": "Kasia"
},
{
"key": "age",
"value": "5"
},
{
"key": "sex",
"value": "female"
}
]
并将(.value)映射到:
[
"Kasia",
"5",
"female"
]
以下内容不假设 objects 中键的顺序。它还会生成 CSV header 行,并确保输出符合典型的 CSV 要求,即结果为“矩形”:
jq -r '
(.[0]|keys_unsorted) as $keys
| $keys,
(.[]
| select(.sex | endswith("female"))
| [.[ $keys[] ]])
| @csv
' target.json
cat target.json | jq '.[] | select(.sex | endswith("female")) |@csv'
我尝试使用上面的代码输出 csv 条件,其中只列出了女孩。
"target.json"
[
{
"name": "Mike",
"age": "15",
"sex": "male"
},
{
"name": "Dan",
"age": "10",
"sex": "male"
},
{
"name": "Kasia",
"age": "5",
"sex": "female"
}
]
但是创建失败并显示此错误代码。
jq: error (at <stdin>:0): object ({"sex":"...) cannot be csv-formatted, only array
谁能告诉我怎么做?
jq -r '
.[]
| select(.sex | endswith("female"))
| to_entries
| map(.value)
| @csv
' target.json
to_entries 至:
[
{
"key": "name",
"value": "Kasia"
},
{
"key": "age",
"value": "5"
},
{
"key": "sex",
"value": "female"
}
]
并将(.value)映射到:
[
"Kasia",
"5",
"female"
]
以下内容不假设 objects 中键的顺序。它还会生成 CSV header 行,并确保输出符合典型的 CSV 要求,即结果为“矩形”:
jq -r '
(.[0]|keys_unsorted) as $keys
| $keys,
(.[]
| select(.sex | endswith("female"))
| [.[ $keys[] ]])
| @csv
' target.json