【问题标题】:How can I export to CSV with condition?如何在有条件的情况下导出为 CSV?
【发布时间】:2021-05-16 20:37:48
【问题描述】:
cat target.json | jq '.[] | select(.sex | endswith("female")) |@csv'

我尝试使用上面的代码输出带有条件的 csv,其中只列出了女孩。

“目标.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

谁能告诉我怎么做?

【问题讨论】:

    标签: json csv select export-to-csv jq


    【解决方案1】:
    jq -r '
      .[] 
      | select(.sex | endswith("female")) 
      | to_entries
      | map(.value) 
      | @csv 
    ' target.json
    

    to_entry 到:

    [
      {
        "key": "name",
        "value": "Kasia"
      },
      {
        "key": "age",
        "value": "5"
      },
      {
        "key": "sex",
        "value": "female"
      }
    ]
    

    并将(.value)映射到:

    [
      "Kasia",
      "5",
      "female"
    ]
    

    【讨论】:

    • 感谢您的精彩回答!事实上,它在终端上显示了 csv 格式的数据。但看起来它没有导出 *****.csv 文件
    • 我可以通过在其末尾添加 > ***.csv 来做到这一点。如果我想将所有数据导出到 csv 文件,你能告诉我如何无条件导出吗?
    • 尝试:cat target.json | jq -r '.[] | to_entry|地图(.value) | @csv ' > out.csv
    • 警告:此解决方案假定对象中键的顺序是一致的。
    • 我收到了这个错误 jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at , line 1: .[] | to_entry |地图(.value) | @csv jq: 1 编译错误
    【解决方案2】:

    以下内容不假设对象内键的顺序。它还生成一个 CSV 标题行,并确保输出符合典型的 CSV 要求,即结果为“矩形”:

    jq -r '
      (.[0]|keys_unsorted) as $keys
      | $keys,
        (.[] 
         | select(.sex | endswith("female")) 
         | [.[ $keys[] ]])
      | @csv 
    ' target.json
    

    【讨论】:

    • 谢谢!我得到了这个错误,虽然 jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at , line 1: (.[0]|keys_unsorted) as $keys | $keys, (.[] | select(.sex | endswith(“female”))| [.[ $keys[] ]]) | @csv
    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 2013-06-29
    • 1970-01-01
    • 2011-08-21
    • 2020-07-18
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多