jsonをcsvに変換し、jqのヘッダに変換

jsonをcsvに変換し、jqのヘッダに変換

このjsonを変換できますか?

[
    {
        "bytes": 276697,
        "checked": false
    },
    {
        "bytes": 276697,
        "checked": false
    }
]

jqにヘッダーがあるテーブルとして?

私は試した:

cat file.json | jq '.[] | join(",")'

しかし、ヘッダーは省略されました。

"276697,false"
"276697,false"

それが必要です:

"bytes,checked"
"276697,false"
"276697,false"

2つのコマンドだけを実行してみてください。

cat file.json | jq '.[] | keys, .[] | join(",")'

しかし、2番目は失敗します。

"bytes,checked"
jq: error (at <stdin>:64): Cannot iterate over null (null)

理想的にはこれ

ベストアンサー1

リストの最初の要素のキーからタイトルを文字列配列として選択し、すべての要素の値を別々の配列に抽出できます。@csv結果リストの各要素に出力演算子を適用すると、CSV形式のデータが参照されます(jqすべての文字列、ブール値または数値を除く)。

$ jq -r '[first|keys] + map([.[]]) | .[] | @csv' file
"bytes","checked"
276697,false
276697,false

または、

$ jq -r '(first|keys), (.[]|[.[]]) | @csv' file
"bytes","checked"
276697,false
276697,false

または、

$ jq -r '(first|keys), map(map(.))[] | @csv' file
"bytes","checked"
276697,false
276697,false

あるいは、値を別々の配列に抽出する別の方法。

これは、入力データ全体で同じ順序で表示されるキーに依存することに注意してください。

しかし、使いやすくなります。ミラー( mlr):

$ mlr --j2c cat file
bytes,checked
276697,false
276697,false

これは単にMillerのコマンドを介してデータを渡すと同時にcat(この方法ではデータは変更されません)オプション--j2c(略語--ijson --ocsv)を使用してデータをJSONからCSVに変換します。 MillerはCSVを正しく認識するため、実際に参照する必要があるフィールドのみを参照します。

次のコマンドを使用してきれいな印刷出力形式を選択して、正しい形式のテーブルを取得することもできます--barred

$ mlr --j2p --barred cat file
+--------+---------+
| bytes  | checked |
+--------+---------+
| 276697 | false   |
| 276697 | false   |
+--------+---------+

--j2pyesの略語です--ijson --opprint。)

または--barred

$ mlr --j2p cat file
bytes  checked
276697 false
276697 false

おすすめ記事