見出し画像

【JSON】どでかいJSONを簡単に扱おう

 こんにちは〜インフラエンジニアのtamolabです!
皆さんはJSONファイルを扱うことはありますでしょうか?私はスクリプト人間なので、JSONはjqコマンドを利用して扱っています。今日はjqコマンドを利用して、JSONを扱う例をご紹介したいと思います。

1. JSONファイルとは

画像3

 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見やすくて簡単じゃん!と思うかもしれないですが、いくつか入れ子(配列の中に配列があり、その中にまた配列など。。。)になるケースが多いので、人の目では見切れません。特に上のように改行がされてない場合がほとんどです。

画像1

 そこで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コマンドの準備

画像4

 CentOS、ubuntu、Macなどjqは様々な環境で利用できます。

【CentOSにてyumでインストール】
$ yum install jq
     
【Macにてbrewでインストール】
$ brew install jq

3. 実行例

画像5

 テストする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'
"太郎"
"花子"

画像2

.[] → 全体の配列の中にある、
.name → nameを出力

という感じです。

 このようにどでかいJSNO(10-100万行など)でもjqを利用すれば必要な情報を取得することができます。取得したものはファイルに書き出してもよし、DBに格納してもよし、変数に格納してもよしです。

4. キーワード

画像6

#jsonファイル #IT #jq #コマンド #Linux #インフラエンジニア #ネットワークエンジニア

5. お問い合わせ

画像7

 本投稿のコメントでも構いませんし、下記からお問い合わせいただいても大丈夫です。
 note.tamolab@gmail.com

サポートをお願いいたしますmm もしXXXXな記事を書いて欲しい、XXXXな記事は不適切だなどのご要望がありましたら、お知らせください!