本ページはプロモーションが含まれています。 プログラミング

万能のデータフォーマット(書式)!JSONフォーマットとは?

JSONとは?About JSON Format.

はじめに結論を書くと、JSONとは特定のルール(フォーマット)をベースに記述されたファイルです。

テキストファイルの一種なので、一般的なテキストファイルでも開くことができます。

エンジニアにとっては、APIでおなじみではないでしょうか。

今回はJSONの概要と、何が良くて使われているのか、などを解説していきます。

こんな方におすすめ

  • なんとなくでJSONを使っている方
  • API開発、またはAPI連携を考えている方 
  • csvやxmlなど、他のフォーマットと悩んでいる方
  • 名前は聞くものの、実はよく理解していないという方

JSONとは?JSONの構造と定義について

JSONフォーマットとは?

はじめに、そもそもの定義から確認しておきましょう。

JSONは元のアルファベットからとっており、正式には(JavaScript Object Notation)と呼ばれます。

google翻訳で直訳すると、「JavaScript オブジェクト表記法」です。

あくまでJavaScriptのデータ構造を元に考案されたもので、JavaScript専用ではありません。

以下、WikiPediaからの引用です。
※Wiki引用のため、一時情報が必要な方は適宜検索をお願い致します。

JavaScript Object Notation(JSON、ジェイソン)はデータ記述言語の1つである。軽量なテキストベースのデータ交換用フォーマットでありプログラミング言語を問わず利用できる[1]。名称と構文はJavaScriptにおけるオブジェクトの表記法に由来する。

ざっくりと分類するなら、人にもプログラムにも優しいフォーマットになります。

JSONの記述ルール(簡易)

JSONの記述ルールについて

タイトルに「簡易」と付けている通り、細かい部分までは踏み込みません。

とはいえ、例外以外は対応できるように心がけます。

JSONの基本構造は、「key-value」による記法です。

「key」部分はすべて文字列リテラルで囲み、「value」部分は型によって異なります。

そして、各「key-value」同士は「,」区切りです。

後で例示するので、細かい部分はそちらをご覧ください。

JSONのvalue型

  • “数値”: 100
  • “文字列”: “test”
  • “真偽値”: true
  • “配列”: []
  • “オブジェクト(連想配列, 辞書)”: {}
  • “空(null)”: null

基本構造は、大体上記のような作りです。

後は配列やオブジェクトを組み合わせて、データ群毎にグルーピングしていきます。

もっと詳しい情報が必要な方は、リファレンスを確認してみましょう。

JSONのフォーマットを他のフォーマット(csv)と比較してみよう

どんな特徴を持つフォーマットなのか確認するため、csvと比較してみます。

csvもJSON同様にフォーマットの一つで、「,」で区切られたファイルです。

百聞は一見に如かず。

早速確認してみましょう。

【JSON】

[
  {
    "id": 1,
    "name": "佐藤",
    "friends": [
      {
        "id": 2
      }
    ]
  },
  {
    "id": 2,
    "name": "鈴木",
    "friends": [
      {
        "id": 1
      },
      {
        "id": 3
      }
    ]
  },
  {
    "id": 3,
    "name": "田中",
    "friends": [
      {
        "id": 2
      }
    ]
  }
]

【csv】

id,name,friends
1,佐藤,2
2,鈴木,"1,3"
3,田中,2

csvに比べて、JSONは大分長いですね。

ほぼ改行のせいですが、一般的にJSONの方が大きなファイルになります。

配列([])やオブジェクト({})、空(null)など、JSONの基本構造を盛り込んでいるので参考にしてください。

全てのデータにラベルが付く(例外あり)ため、csvよりも厳格な仕様に見えますね。

JSONフォーマットの便利な点

上の特徴を踏まえて、JSONは何が良いのか考えてみましょう。

使用用途の特性上、比較対象にはDB(データベース)も含みます。

1. プログラムとの親和性が高い

先ほどの例で考えると、一人一人のデータを処理する場合が分かりやすいと思います。

csvの方では、その行を見ただけでは何のデータか分かりません。

1,佐藤,2

一方で、JSONの方ではラベルが付くためかなり分かりやすいです(改行省略)。

{ “id”: 1, “name”: “佐藤”, “friends”: [ { “id”: 2 } ] }

特に、ループ処理などで差が顕著に出ます。

JSONではキー値でアクセスできますが、csvは加工しないと添え字(番号)でのアクセスです。

処理を考えれば、可読性はJSONに軍配が上がるでしょう。

2. データ構造の変更がしやすい

csvはRDBと同じく行/列で表示されますが、JSONは可変で詰め込めます。

いわゆる、NoSQL(Not Only SQL)のDBに近いです。

実際に、NoSQLの一つであるMongoDBはJSONと親和性があります。

MongoDB公式よりJSON(BSON)についての解説

行列構造の場合はリレーション、主キーなど考える点が多く変更には一考が必要です。

一方、JSONの場合はいらないキーがあっても無視しやすくなっています。

構造の変更については、JSON構造に軍配が上がります。

3. データ処理に向いている

テキストで比較的軽量なので、ビッグデータなどのデータ処理に向いています。

割と好き勝手にデータを入れられるため、検証段階にもおすすめです。

一方で、チューニング次第ではcsvの方が向いています。

理由としては単純ですが、ファイルサイズがJSONより小さいからです。

ただし、csvでは普通に組むとjoin(結合)が必要に場合があります。

プログラムとの相性やデータ量なども加味して、何を使うかは決定しましょう。

JSONフォーマットの注意点

当たり前のことですが、汎用性の高いJSONフォーマットとて全能ではありません。

苦手というよりは、より優れた手段が存在する場面は少なくないでしょう。

事例をいくつかピックアップしましたので、活用の一助になればと思います。

1. 簡単に構造を変えられる(つい変えてしまう)

この点は、メリットがそのままデメリットになる典型ですね。

自分だけならともかく、複数人で使っている場合は問題になりかねません。

では、構造を変えたくなったらどのようにすれば良いでしょうか。

私の意見としては、しっかりスキーマを用意することと、バージョン管理をすることです。

スキーマを作成しよう

スキーマとは、図解や概要など訳される言葉です。

JSONをはじめとしたフォーマットでは、具体的な構造を表します。

データベースで例えるなら、テーブル定義書のようなものです。

複数人での作業はもちろんのこと、どうしても忘れてしまうので作成を推奨します。

バージョン管理をしよう

特にAPI開発ではあるあるで、どのように更新するかは大切な要素です。

例えば、Office系ソフトの下位互換を想像すると分かりやすいと思います。

クラウド版ではなくなりましたが、インストール版ではよく互換性メッセージが表示されたものです。

JSONを記述する場合も、同様に更新前の品質を担保することが大切になります。

丁度良いサイトがあったので、興味のある方は確認してください。

https://learn.microsoft.com/ja-jp/azure/architecture/best-practices/api-design#uri-versioning

2. 内容が重複しやすい

JSONでは、一つのグループ(csvの一行)で色々なデータを詰め込むことができます。

先にあげた例では、「friends」の部分がそうです。

[
{
"id": 1,
"name": "佐藤",
"friends": [
{
"id": 2
}
]
},
{
"id": 2,
"name": "鈴木",
"friends": [
{
"id": 1
},
{
"id": 3
}
]
},
{
"id": 3,
"name": "田中",
"friends": [
{
"id": 2
}
]
}
]

そして、友達同士がお互いのIDをフレンドとして所持しています。

データによって異なりますが、例のような重複は珍しくありません。

RDBのようにデータを正規化して使う場面には、素直にDBを使いましょう。

3. データベースのような一貫性を担保できない(例外あり)

データベースの場合は一貫性を重要視しています。

ざっくり言えば、ルールに則って正確に運用しています!という状態です。

JSONの場合は、あくまで書式に過ぎません。

重複のないIDを振ろうが、名前をつけようが、単体での品質管理はできません。

正確性を取るか速度や可読性を取るか、そういった要素が関わってきます。

JSONの使いどころは?どのような場面で使われるのかを解説。

JSONの使いどころ。活用事例。

データの変更に強く、データとしても読みやすいのがJSON形式です。

実際にどのような場面で使われているでしょうか。

API開発

API

個人的には、”JSONといえば”みたいな印象があります。

ウェブ系のAPI連携では、突き詰めれば全て文字列(=文字データ)によるものです。

そのため、プログラムでの取り回しが良く、可読性にも優れるJSONはよく採用されます。

また、バージョンアップもしやすいので、開発サイクルの早い昨今にはふさわしいと言えるでしょう。

ビッグデータなどの大量のデータ処理

ビッグデータ

「ビッグデータ」はAIやIoTの普及によって、よく聞くようになったのではないでしょうか。

細かいデータはさておき、日々蓄積される大量のデータのことです。

決済情報などの顧客情報あたりが想像しやすいと思います。

とにかく大量のデータを処理するため、軽量かつ高速であることが重要です。

ビッグデータでは、JSONだけでなくcsvもよく使われます。

行列で表せる場合はcsvを、構造が深くなる場合はJSONを選ぶと無難です。

自動処理

自動処理。オートメーション。

最後に、エンジニアがしばしば使う方法を紹介します。

それは、自動化の元データとして使う方法です。

JSON形式の場合は、親子関係も簡単に作れます。

オブジェクトも配列も入れ子にできるので、例えば下記の様な感じです。

{
  "parent": {
    "children": [{
      "name": "taro",
      "grandchildren": {
         "name": "kotaro"
      }
    }, {
      "name": "ziro",
      "grandchildren": null

    }]
  }
}

略していてあまりいい構造ではありませんが、「grandchildren」に注目してみてください。

上の方はデータがあり、下は空(null)になっています。

例示したことを繰り返せば、ひ孫、玄孫要素など深堀することが可能です。

こちらも、構造が深くなる場合やデータが可変の場合に向いています。

まとめ:JSONフォーマットにデータ処理はおすすめ!概要を理解して業務を効率化しよう!

まとめ。JSONは汎用性抜群。大量データにも強い。

ここまで、JSONについて概要や用途を紹介しました。

ポイントとしては、以下の点に当てはまれば前向きに採用を考えていいと思います。

  • データの一貫性が絶対的ではない場合 ※逆はRDBを検討
  • データが行列のみで表せない場合  ※行列のみの場合はcsvでも可。正直どちらでも。
  • 処理するデータが多い場合 ※少なくてもありだが、内容の割にファイルが大きくなりがち。

今後作るシステムなら、JSON採用を第一・第二候補に入れていいぐらいには使いやすいです。

少なくとも、覚えておいて損がないことは自信を持って言えます。

おすすめ記事をCHECK!

aptがあればapt-getは不要? 1

Debian系のパッケージ管理として「apt」が登場してから、時々「apt-getは不要!」という話を聞くことがあります。 結論から言うと、公式では「使い分けよう」が正解です。 公式の方では、次のよう …

2023年2月時点。新しくなったAWSシークレットキーの作り方。 2

AWSの管理画面は、結構頻繁に変わりますよね。 以前まではIAMとシークレットアクセスキーを同時に作成できましたが、今はその機能が見当たらなくなりました。 結論としては、IAMのユーザーを作成後に、設 …

初心者におすすめ! 失敗しないレンタルサーバー3選。 3

ある程度経験がないと、レンタルサーバーはどれも同じに見えるかもしれません。 しかし、選び方次第で、設定に2倍、3倍の時間がかかってしまうこともあります。 そこで今回は、コスパ・使いやすさに特化した3つ …

-プログラミング