【问题标题】:Convert JSON array into CSV using jq使用 jq 将 JSON 数组转换为 CSV
【发布时间】:2018-05-23 16:17:12
【问题描述】:

我有一个名为 temp.json 的 JSON 文件。

{
  "users": [
    {
      "username": "jack",
      "email": "jack@somewhere.com",
      "total running apps": "1",
      "api-mock-app": "0",
      "flogo": "1",
      "ipaas": "0",
      "nodejs-app": "0"
    },
    {
      "username": "jill",
      "email": "jill@somewhere.com",
      "total running apps": "1",
      "api-mock-app": "0",
      "flogo": "1",
      "ipaas": "0",
      "nodejs-app": "0"
    }
  ]
}

我想把这个 JSON 转换成类似这样的 CSV,

username email              total running apps api-mock-app flogo ipaas nodejs-app
jack     jack@somewhere.com 1                  0            1     0     0
jill     jill@somewhere.com 1                  0            1     0     0

我试过了

jq -r '.users[] | keys[0] [.username, .email, ."total running apps", ."api-mock-app", .flogo, .ipaas, ."nodejs-app"] | join(", ") | @csv' temp.json`

但是我遇到了错误

q: error (at temp.json:22): Cannot index string with string "jack"`

谁能解释我在哪里犯错,请告诉我正确的答案。

【问题讨论】:

标签: json csv jq


【解决方案1】:

jq解决方案:

jq -r '(.users[0] | keys_unsorted), (.users[] | to_entries | map(.value))|@csv' temp.json

输出:

"username","email","total running apps","api-mock-app","flogo","ipaas","nodejs-app"
"jack","jack@somewhere.com","1","0","1","0","0"
"jill","jill@somewhere.com","1","0","1","0","0"

【讨论】:

    【解决方案2】:

    我认为最简单的方法是

    jq -r "(.users[0] | keys_unsorted),  (.users[] | map(.) | @csv)"
    

    【讨论】:

      【解决方案3】:

      我试过了,效果很好,

      jq -r '(.users[0] | keys), (.users[] | [.username, .email, ."total running apps", ."api-mock-app", .flogo, .ipaas, ."nodejs-app"]) | @csv' temp.json
      

      输出格式是。

      "api-mock-app","email","flogo","ipaas","nodejs-app","total running apps","username"
      "jack","jack@somewhere.com","1","0","1","0","0"
      "jill","jill@somewhere.com","1","0","1","0","0"
      

      【讨论】:

      • 但在这种情况下标题列的顺序是任意的......并且列不对应于从属值
      • 是的,我意识到,keys_unsorted 可以解决这个问题,因为您的回答正确,谢谢。
      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多