【JSON】どでかいJSONを簡単に扱おう
こんにちは〜インフラエンジニアのtamolabです!
皆さんはJSONファイルを扱うことはありますでしょうか?私はスクリプト人間なので、JSONはjqコマンドを利用して扱っています。今日はjqコマンドを利用して、JSONを扱う例をご紹介したいと思います。
1. JSONファイルとは
JSONとは「JavaScriptのオブジェクト記法を用いたデータ交換フォーマット」です。Python、PHP、JavaScript、C++、Javaなど様々な言語でサポートされており、各プログラミング言語間のデータの受け渡しがとてもとても簡単にできます。
CSVとXMLとJSONの違い
違いについては、実際に見てもらったほうがいいですね。どの形式にもメリットデメリットがあり、用途に合わせて選択する必要があります。
【CSVの例】
id,name,shincho,taiju
1,太郎,171,64
2,花子,150,49
【XMLの例】
<?xml version="1.0" encoding="utf-8"?>
<data>
<item>
<id>1</id>
<name>太郎</name>
<shincho>170</shincho>
<taiju>64</ntaiju>
</item>
<item>
<id>2</id>
<name>花子</name>
<shincho>150</shincho>
<taiju>49</ntaiju>
</item>
</data>
【JSONの例】
[
{"id" : "1", "name" : "太郎", "shincho" : "170", "taiju" : "64"},
{"id" : "2", "name" : "花子", "shincho" : "150", "taiju" : "49"}
]
JSON見やすくて簡単じゃん!と思うかもしれないですが、いくつか入れ子(配列の中に配列があり、その中にまた配列など。。。)になるケースが多いので、人の目では見切れません。特に上のように改行がされてない場合がほとんどです。
そこでjqコマンドを利用すると、上記の改行なしのjson配列をきれいに生成してくれます。
$ cat test.json | jq .
{
"foundation": "Mozilla",
"model": "box",
"week": 45,
"transport": "car",
"month": 7
}
{
"entries": [
{
"id": 12345,
"type": "file_version",
"sha1": "134b65991ed521fcfe4724b7d814ab8ded5185dc",
"name": "tigers.jpeg",
"size": 629644,
"created_at": "2012-12-12T10:53:43-08:00",
"modified_at": "2012-12-12T10:53:43-08:00",
"modified_by": {
"id": 11446498,
"type": "user",
"name": "AaronLevie",
"login": "ceo@example.com"
},
"trashed_at": "2012-12-12T10:53:43-08:00",
"trashed_by": {
"id": 11446498,
"type": "user",
"name": "AaronLevie",
"login": "ceo@example.com"
},
"restored_at": "2012-12-12T10:53:43-08:00",
"restored_by": {
"id": 11446498,
"type": "user",
"name": "AaronLevie",
"login": "ceo@example.com"
},
"purged_at": "2012-12-12T10:53:43-08:00",
"uploader_display_name": "EllisWiggins"
}
],
"limit": 1000,
"offset": 2000,
"order": [
{
"by": "type",
"direction": "ASC"
}
],
"total_count": 5000
}
さらに、jqコマンドを利用すると必要なデータのみ抜き出すこともできます。
$ cat test.json | jq '.entries[].created_at'
"2012-12-12T10:53:43-08:00"
参考
2. jqコマンドの準備
CentOS、ubuntu、Macなどjqは様々な環境で利用できます。
【CentOSにてyumでインストール】
$ yum install jq
【Macにてbrewでインストール】
$ brew install jq
3. 実行例
テストするjsonは先ほどのJSONを利用しましょう。
[{"id" : "1", "name" : "太郎", "shincho" : "170", "taiju" : "64"}, {"id" : "2", "name" : "花子", "shincho" : "150", "taiju" : "49"}]
さて、この一行のJSONファイルをjqを利用して整形すると。。
host$cat test.json| jq .
[
{
"id": "1",
"name": "太郎",
"shincho": "170",
"taiju": "64"
},
{
"id": "2",
"name": "花子",
"shincho": "150",
"taiju": "49"
}
]
はい、きれいですね。さらにnameだけを取得することもできます。
host$cat test.json| jq '.[].name'
"太郎"
"花子"
.[] → 全体の配列の中にある、
.name → nameを出力
という感じです。
このようにどでかいJSNO(10-100万行など)でもjqを利用すれば必要な情報を取得することができます。取得したものはファイルに書き出してもよし、DBに格納してもよし、変数に格納してもよしです。
4. キーワード
#jsonファイル #IT #jq #コマンド #Linux #インフラエンジニア #ネットワークエンジニア
5. お問い合わせ
本投稿のコメントでも構いませんし、下記からお問い合わせいただいても大丈夫です。
note.tamolab@gmail.com
サポートをお願いいたしますmm もしXXXXな記事を書いて欲しい、XXXXな記事は不適切だなどのご要望がありましたら、お知らせください!