■質問内容
以下のような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
言語はjsで良いのでしょうか?→失礼しましたjqコマンドですね
csvはファイル出力するのでしょうか?
csv中の特殊文字の扱いはどうするのでしょうか?
jq で csv に変換なんてできるのか、と思って調べてみましたが、もっと単純なデータ構造じゃないと難しそうですね…。
https://medium.com/veltra-engineering/jq-supports-json-to-csv-fb5c951a9575
階層を揃えられれば、あとはリストにして@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 ~]#
回答1件
あなたの回答
tips
プレビュー