質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

1回答

1809閲覧

jqコマンドにてjsonからcsv形式に変換

hakoritenshi

総合スコア41

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2020/12/29 01:23

■質問内容
以下のようなjsonをcsvに変換したいです。
jqで頑張っているのですがうまくいかず、、、

■json

json

1{ 2 "SecurityGroups": [ 3 { 4 "Description": "sg1", 5 "IpPermissions": [ 6 { 7 "PrefixListIds": [], 8 "FromPort": 0, 9 "IpRanges": [ 10 { 11 "Description": "Des1", 12 "CidrIp": "10.0.0.1/24" 13 }, 14 { 15 "Description": "Des2", 16 "CidrIp": "10.0.0.2/24" 17 } 18 ], 19 "ToPort": 65535, 20 "IpProtocol": "tcp" 21 }, 22 { 23 "PrefixListIds": [], 24 "IpRanges": [ 25 { 26 "Description": "Des1", 27 "CidrIp": "10.0.1.1/24" 28 }, 29 { 30 "Description": "Des2", 31 "CidrIp": "10.0.1.2/24" 32 } 33 ], 34 "IpProtocol": "-1" 35 } 36 ], 37 "GroupName": "gn1", 38 "VpcId": "vpc1", 39 "OwnerId": "111", 40 "GroupId": "gi1" 41 } 42 ] 43}

■csvフォーマット

csv

1# GroupName,GroupId,IpProtocol,FromPort,ToPort,CidrIp,Description 2gn1,gi1,tcp,0,65535,10.0.0.1/24,Des1 3gn1,gi1,tcp,0,65535,10.0.0.2/24,Des2 4gn1,gi1,-1,,,10.0.1.1/24,Des1 5gn1,gi1,-1,,,10.0.1.2/24,Des2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/12/29 01:54 編集

言語はjsで良いのでしょうか?→失礼しましたjqコマンドですね csvはファイル出力するのでしょうか? csv中の特殊文字の扱いはどうするのでしょうか?
hakoritenshi

2020/12/29 03:04

階層を揃えられれば、あとはリストにして@csvなのですが、 階層を揃えられず、悩んでいます。 以下が今のところ一番惜しい感じなのですが、フルメッシュに項目が作られてしまって想定と違う個数になってしまうんです、、、 [root@rhel8 12:00:01 ~]# cat hoge.json | jq -r '.SecurityGroups[]|{GroupName,IpPermissions:.IpPermissions[].IpRanges[],FromPort:.IpPermissions[].IpProtocol}' { "GroupName": "gn1", "IpPermissions": { "Description": "Des1", "CidrIp": "10.0.0.1/24" }, "FromPort": "tcp" } { "GroupName": "gn1", "IpPermissions": { "Description": "Des1", "CidrIp": "10.0.0.1/24" }, "FromPort": "-1" } { "GroupName": "gn1", "IpPermissions": { "Description": "Des2", "CidrIp": "10.0.0.2/24" }, "FromPort": "tcp" } { "GroupName": "gn1", "IpPermissions": { "Description": "Des2", "CidrIp": "10.0.0.2/24" }, "FromPort": "-1" } { "GroupName": "gn1", "IpPermissions": { "Description": "Des1", "CidrIp": "10.0.1.1/24" }, "FromPort": "tcp" } { "GroupName": "gn1", "IpPermissions": { "Description": "Des1", "CidrIp": "10.0.1.1/24" }, "FromPort": "-1" } { "GroupName": "gn1", "IpPermissions": { "Description": "Des2", "CidrIp": "10.0.1.2/24" }, "FromPort": "tcp" } { "GroupName": "gn1", "IpPermissions": { "Description": "Des2", "CidrIp": "10.0.1.2/24" }, "FromPort": "-1" } [root@rhel8 12:00:05 ~]#
guest

回答1

0

自己解決

自己解決できました!

cmd

1[root@rhel8 13:32:17 tmp]# 2cat hoge.json | 3 jq -r '.SecurityGroups[] | 4 { 5 Description, 6 GroupName, 7 GroupId, 8 IpPermissions:.IpPermissions[] 9 } | 10 { 11 Description, 12 GroupName, 13 GroupId, 14 IpProtocol:.IpPermissions.IpProtocol, 15 FromPort:.IpPermissions.FromPort, 16 ToPort:.IpPermissions.ToPort, 17 IpRanges:.IpPermissions.IpRanges[] 18 } | 19 [ 20 .Description,.GroupName, 21 .GroupId,.IpProtocol, 22 .FromPort,.ToPort, 23 .IpRanges.Description, 24 .IpRanges.CidrIp 25 ] |@csv' 26 27"sg1","gn1","gi1","tcp",0,65535,"Des1","10.0.0.1/24" 28"sg1","gn1","gi1","tcp",0,65535,"Des2","10.0.0.2/24" 29"sg1","gn1","gi1","-1",,,"Des1","10.0.1.1/24" 30"sg1","gn1","gi1","-1",,,"Des2","10.0.1.2/24" 31[root@rhel8 13:32:19 tmp]#

■参考サイト
https://qiita.com/sotoiwa/items/431358283dee00eb6f46
https://jupitrisonlabs.hatenadiary.jp/entry/20151127/1448606090

投稿2021/01/16 04:43

hakoritenshi

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問