Jsonを行ベースのデータ構造に展開する json2line

最近増えてきた json の扱いに困っていませんでしょうか? jqよくわからん、使い慣れたgrepawkperlワンライナー使いたい。

そこで json2line を作りました。

https://github.com/nazoking/json2line

python 2.6 以上で動きます。たぶん

pip install https://github.com/nazoking/awsxx/wiki/dist/json2line-0.0.1.tar.gz

でインストール出来ます。


こんな感じ

$ aws ec2 describe-instances --filters name=tag:Name,values=ft02 | json2line --tsv -l
Reservations.OwnerId    6765247xxxxx
Reservations.ReservationId      r-0c759cxx
Reservations.Groups.GroupName   hogehxxxx
Reservations.Groups.GroupId     sg-xxxxxx
Reservations.Instances.Monitoring.State disabled
Reservations.Instances.PublicDnsName    ec2-123-224-111.ap-northeast-1.compute.amazonaws.com
Reservations.Instances.KernelId aki-44992845
Reservations.Instances.State.Code       16
Reservations.Instances.State.Name       running
(中略)
Reservations.Instances.AmiLaunchIndex   0
ResponseMetadata.RequestId      c3cxxxxff-9xx-4axe-9xx0-f6a12f7axx

なのでgrepとかできます。
--help でオプション一覧出てきますが
--tsv でTSVっぽい
-l でリストのインデックスを表示しない
くらいをよく使うんじゃないでしょうか。

例えば awscli を使って Name:ft02 というタグのついたEC2インスタンスを route53 で hoge.example.com という名前で登録するには

 route53 change_record hosted_zone_id hoge.example.com. CNAME `aws ec2 describe-instances --filters name=tag:Name,values=ft02 | json2line --tsv -l|awk '/PublicDnsName/{print $2}'`

という感じのワンライナーになります。

初めてくらいでpython書いたのでツッコミお願いします。