如何导出为 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