2017-12-09 32 views
1

私はtemp.jsonというJSONファイルを持っています。jqを使用してJSON配列をCSVに変換

私はこの

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"` 

を取得しています

username email    total running apps api-mock-app flogo ipaas nodejs-app 
jack  [email protected] 1     0   1  0  0 
jill  [email protected] 1     0   1  0  0 

、このlilke CSVにこのJSONを変換したい

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

私は間違いを犯しています。簡単に正しい答えを教えてください。

+0

の可能性のある重複[JQを使用してCSVにJSONを変換](https://stackoverflow.com/questions/47715234/convert-a-json-into-csv-using-jq) – knb

答えて

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","[email protected]","1","0","1","0","0" 
"jill","[email protected]","1","0","1","0","0" 
-1

が、私はこれを試みたが、それは完全に働いた、

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","[email protected]","1","0","1","0","0" 
"jill","[email protected]","1","0","1","0","0" 
+0

ただし、ヘッダー列の順序は任意です。...列は従属値に対応しません – RomanPerekhrest

+0

ええ、私は、keys_unsortedがあなたが正しく答えるようにこの問題を解決することに気づきました、ありがとう。 –

関連する問題