JSONとは?わかりやすく解説!初めてのJSON jqコマンド入門

JSONとは?

JSONとは?

JSON:JavaScript Object Notation(ジェイソン)はデータをやり取りする際のデータ形式のひとつです。JSONがどういうものかは言葉で説明するよりも実際に目にしたほうが分かりやすいです。

下記のような顧客データがあるとします。これはエクセルのデータです。

エクセルデータ

顧客データ・excelの表計算データ

JSONとはこのような表計算状のデータをテキストだけで表現したデータと思ってください。表計算のデータをテキストだけで表現してくださいと言われれば、まあ色々思いつくと思いますが、JSONはそのデータ書式のひとつです。

実際にこのデータをJSON形式で表してみます。

JSON形式データ
[{"年齢":23,"出身地":"東京都","性別":"男","来店回数":3,"売上":"¥13,000"},
{"年齢":21,"出身地":"静岡県","性別":"女","来店回数":2,"売上":"¥8,000"},
{"年齢":18,"出身地":"愛知県","性別":"男","来店回数":7,"売上":"¥96,000"},
{"年齢":26,"出身地":"三重県","性別":"男","来店回数":1,"売上":"¥5,000"},
{"年齢":24,"出身地":"岡山県","性別":"女","来店回数":3,"売上":"¥21,000"},
{"年齢":32,"出身地":"佐賀県","性別":"女","来店回数":1,"売上":"¥24,000"}]

どうでしょうか?JSONではカッコやクォーテーション記号を使ってうまくデータ構造を表現しています。JSON形式のデータを見やすくするにはjqコマンドを使います。jqコマンドはJSON形式のデータをきれいに整えたり、一部のデータを取り出したりすることができます。yum install jqや apt-get install jqでインストールしましょう。

使い方はいたって簡単です。JSON形式のデータをcatやechoで表示したものをパイプでjqに渡すだけで整形してくれます。

JSONファイルをjqで整形
$ cat JSON | jq
[
  {
    "年齢": 23,
    "出身地": "東京都",
    "性別": "男",
    "来店回数": 3,
    "売上": "¥13,000"
  },
  {
    "年齢": 21,
    "出身地": "静岡県",
    "性別": "女",
    "来店回数": 2,
    "売上": "¥8,000"
  },
  {
    "年齢": 18,
    "出身地": "愛知県",
    "性別": "男",
    "来店回数": 7,
    "売上": "¥96,000"
  },
  {
    "年齢": 26,
    "出身地": "三重県",
    "性別": "男",
    "来店回数": 1,
    "売上": "¥5,000"
  },
  {
    "年齢": 24,
    "出身地": "岡山県",
    "性別": "女",
    "来店回数": 3,
    "売上": "¥21,000"
  },
  {
    "年齢": 32,
    "出身地": "佐賀県",
    "性別": "女",
    "来店回数": 1,
    "売上": "¥24,000"
  }
]

上記のデータは違う書き方もできます。配列を使った書き方は以下のようなものです。

JSON
$ cat JSON
{
  "年齢":[23,21,18,26,24,32],
  "出身地":["東京都","静岡県","愛知県","三重県","岡山県","佐賀県"],
  "性別":["男","女","男","男","女","女"],
  "来店回数":[3,2,7,1,3,1],
  "売上":["¥13,000","¥8,000","¥96,000","¥5,000","¥21,000","¥24,000"]
}
$ cat JSON | jq
{
  "年齢": [
    23,
    21,
    18,
    26,
    24,
    32
  ],
  "出身地": [
    "東京都",
    "静岡県",
    "愛知県",
    "三重県",
    "岡山県",
    "佐賀県"
  ],
  "性別": [
    "男",
    "女",
    "男",
    "男",
    "女",
    "女"
  ],
  "来店回数": [
    3,
    2,
    7,
    1,
    3,
    1
  ],
  "売上": [
    "¥13,000",
    "¥8,000",
    "¥96,000",
    "¥5,000",
    "¥21,000",
    "¥24,000"
  ]
}

イメージはわいたでしょうか?それでは詳しくJSONの書式について説明していきます。

JSONの構造

JSONのデータの基本について説明します。以下のようなJSONのデータがあります。

{
"年齢": 23,
"出身地": "東京都" }

この時最も基本的なデータの構造は年齢:23という部分です。年齢はデータの説明にあたる部分で「キー」とか「変数」などと呼びます。キーの値は:で区切って右側に書きます。23がキー年齢の値になります。カンマで区切って次にまたキーの出身地があり、値として東京都が入っています。

{キー:値, キー:値}

という構造になっています。

JSONのキーと値の部分に注目するとダブルクォーテーション” ”で囲っているのがわかるとおもいます。これはJSONでは文字列として認識させるためにはダブルクォーテーションで囲う必要があるからです。”年齢”とすれば年齢を文字列として認識されます。一方で値の数字「23」に関してはダブルクォーテーションで囲っていません。これは文字列ではなく数値として認識させているからです。数値はダブルクォーテーションで囲う必要はありません。

{ "キー":"文字列", "キー":値} のように表記されています。

先ほどのデータはAさんのデータですが、Bさん、Cさんと足したい場合は、

{
"年齢": 23,
"出身地": "東京都" }

{
"年齢": 21,
"出身地": "静岡県" }
などと足していけばよいです。

JSONで値として指定できるのは

  • “文字列” 例:”年齢”
  • 数値 例:176.2
  • null 例:null 値が無いことを表す
  • 真偽値 例:true

があります。

JSONを記述するときに気を付けたいところは

  • 文字列をダブルクォーテーションで囲っているか?
  • 全角スペースや記号を使っていないか?
  • 値の終わりにカンマを忘れていないか?
  • カッコは閉じられているか?

などがあります。

配列の書き方

{
"年齢": 23,
"出身地": "東京都"
}

{
"年齢": 21,
"出身地": "静岡県"
}

上記の書き方では、年齢や出身地といったキーが複数回登場することになるので効率的な書き方ではありません。そこで配列の書き方を使います。配列を使うと以下のように書き変えられます。

{
"年齢": [ 23, 21 ],
"出身地": [ "東京都", "静岡県" ] }

少しすっきりとした見た目になったと思います。年齢というキーには1番目に23, 2番目には21という数値が入っているということを表しています。このように配列を使った書き方も可能です。

データの追加

JSONの特徴としてデータの追加が用意だという点が挙げられます。例えば下記のデータの出身地に対して都道府県と市区町村をキーとして追加したいと思ったときは

{
"年齢": 23,
"出身地": "東京都"
}

下記のように {}を出身地の下に加えて書くようにすれば簡単に追加できます。
{
"年齢": 23,
"出身地": {
"都道府県": "東京都",
"市区町村": "新宿区"
}
}

キー”出身地”にキー”都道府県”と”市区町村”を追加してそれぞれの値は”東京都”と”新宿区”ですよという意味になります。さらにもっと細かくしたい場合も同様に階層状に追加していけば簡単にデータを追加できます。表計算状の形では出身地の中に都道府県、市区町村、丁目、番地と追加していくと列がどんどん増えて取り扱いが大変ですが、JSON形式では容易な特徴があります。こうした特徴を使ったデータベースがNoSQLと呼ばれる種類のデータベースのひとつMongoDBです。

JqコマンドでJSONデータを整形・取り出そう

巨大なデータベースになったJSONファイルは深い階層になっているとかっこがたくさん出てきてデータ構造をパッと見てもわかりにくくなります。

また、特定のデータを取りだすには中身をキーワード検索していては大変です。そんなときにはjqコマンドが役に立ちます。

jqコマンドを使えばJSONデータを解析して視覚的にわかりやすく整形してくれたり、JSONデータから特定のデータを指定して取り出すことができます。

下記のJSONデータはjqコマンドで整形して見やすくしています。

JSONデータ
$ cat json5 | jq 
[
 {
   "age": 23,
   "birthplace": {
            "prefectures": "東京都",
            "city:": "新宿区"
          }
 }
]

JSONデータは最も外側のかっこから指定して外していきます。ここでは[ ]が最外側のかっこです。これをjqコマンドで外してみます。

$ cat json5 | jq .[0]
{
"age": 23,
"birthplace": {
"prefectures": "東京都",
"city:": "新宿区"
}
}

.[0]で外側の1個目のかっこを指定して外しています。.[]でも大丈夫です。次にキーを指定して取り出していきます。東京都の値を取り出したいときはそのキーである”prefecture”とそのキーであるbirthplaceを指定します。

$ cat json4 | jq .[].birthplace.prefectures
"東京都"

上記のように外側のかっこを外すように指定していくと東京都だけを取り出せます。

役立つwebツール

JSONデータをcsvに変換してくれるwebサイト

参考 JSON To CSV Converter取得できませんでした

CSVやエクセルデータ(内容コピペで)をJSON形式に変換してくれるwebサイト

参考 Mr. Data Converter取得できませんでした

JSONファイルの書式が正しいか判定してくれるサイト

参考 JSONLint - The JSON Validator取得できませんでした

コメントを残す

メールアドレスが公開されることはありません。