JSONとは何ですか?データ交換のためのより良いフォーマット

JavaScript Object Notationは、キーと値のペアと順序付きリストに基づく構造化データのスキーマレスのテキストベースの表現です。JSONはJavaScriptから派生していますが、ネイティブで、またはほとんどの主要なプログラミング言語のライブラリを介してサポートされています。JSONは、WebクライアントとWebサーバー間で情報を交換するために一般的に使用されますが、これに限定されません。 

過去15年間で、JSONはWeb上で広く普及しています。今日では、ほとんどすべての公開されているWebサービスで選択されている形式であり、プライベートWebサービスでも頻繁に使用されています。

JSONの人気により、多くのデータベースでネイティブJSONがサポートされるようになりました。PostgreSQLやMySQLなどのリレーショナルデータベースには、JSONデータの保存とクエリのネイティブサポートが付属しています。MongoDBやNeo4jなどのNoSQLデータベースもJSONをサポートしていますが、MongoDBはわずかに変更されたバイナリバージョンのJSONをバックグラウンドで使用しています。

この記事では、JSONを簡単に見て、JSONがどこから来たのか、XMLに対する利点、欠点、いつ使用すべきか、いつ代替案を検討すべきかについて説明します。しかし、最初に、JSONが実際にどのように見えるかについての核心に飛び込みましょう。

JSONの例

JSONでエンコードされたデータの例を次に示します。

{{

  「firstName」:「Jonathan」、

  「lastName」:「Freeman」、

  「loginCount」:4、

  「isWriter」:true、

  “ worksWith”:[“ Spantree Technology Group”、“”]、

  「ペット」:[

    {{

      「名前」:「リリー」、

      「タイプ」:「アライグマ」

    }

  ]

}

上記の構造は、人のいくつかの属性を明確に定義しています。これには、姓名、ログイン回数、ライターかどうか、一緒に仕事をしている会社のリスト、ペットのリスト(この場合は1つのみ)が含まれます。上記のような構造は、サーバーからWebブラウザーまたはモバイルアプリケーションに渡され、データの表示や後で参照できるように保存するなどのアクションを実行します。

JSONは、文字列、数値、ブール値、リスト、オブジェクト、nullなどの値型の数が最小限の一般的なデータ形式です。表記はJavaScriptのサブセットですが、これらのタイプはすべての一般的なプログラミング言語で表されるため、JSONは言語のギャップを越えてデータを送信するのに適しています。

JSONファイル

JSONデータは、拡張子が.jsonで終わるファイルに保存されます。JSONの人間が読める形式の精神に沿って、これらは単なるプレーンテキストファイルであり、簡単に開いて調べることができます。SQLizerブログで説明されているように、これはJSONの幅広い相互運用性の鍵でもあります。名前を付けることができるほぼすべての言語がプレーンテキストファイルを読み取って処理でき、インターネット経由で簡単に送信できるからです。

なぜJSONを使用する必要があるのですか? 

JSONの有用性と重要性を理解するには、Webでの対話性の歴史について少し理解する必要があります。 

2000年代の初めに、Web上の双方向性が変化し始めました。当時、ブラウザは主に情報を表示するためのダムクライアントとして機能し、サーバーは表示用のコンテンツを準備するためにすべての大変な作業を行いました。ユーザーがブラウザのリンクまたはボタンをクリックすると、リクエストがサーバーに送信され、サーバーは必要な情報をHTMLとして準備し、ブラウザはHTMLを新しいページとしてレンダリングします。このパターンは遅く、非効率的であり、ページの一部だけが変更された場合でも、ブラウザはページ上のすべてを再レンダリングする必要がありました。

全ページのリロードにはコストがかかるため、Web開発者は、全体的なユーザーエクスペリエンスを向上させるために新しいテクノロジーを検討しました。一方、最近Internet Explorer 5で導入された、ページの表示中にバックグラウンドでWeb要求を行う機能は、表示用にデータを段階的にロードするための実行可能なアプローチであることが証明されていました。ページのコンテンツ全体をリロードする代わりに、更新ボタンをクリックすると、バックグラウンドでロードされるWebリクエストがトリガーされます。コンテンツが読み込まれると、ブラウザのユニバーサルプログラミング言語であるJavaScriptを使用して、データを操作、保存、およびページに表示できます。

RESTとSOAP:JSON接続

元々、このデータは、SOAP(Simple Object Access Protocol)と呼ばれるメッセージングプロトコルを使用してXML形式(例については以下を参照)で転送されていました。しかし、XMLは冗長であり、JavaScriptで管理するのは困難でした。 JavaScriptには、言語内でデータを表現する方法であるオブジェクトがすでに含まれていたため、Douglas Crockfordは、その式のサブセットを新しいデータ交換形式の仕様として採用し、JSONと名付けました。 JSONは、人々が読みやすく、ブラウザーが解析しやすいものでした。

00年代の間に、Representational State Transfer(REST)と呼ばれる別のWebサービステクノロジが、データを転送する目的でSOAPを追い越し始めました。REST APIを使用したプログラミングの大きな利点の1つは、XMLだけでなく、JSONやHTMLなどの複数のデータ形式を使用できることです。Web開発者がXMLよりもJSONを好むようになると、SOAPよりもRESTを好むようになりました。Kostyantyn KharchenkoがSvitlaブログに書いているように、「多くの点で、RESTの成功は、さまざまなプラットフォームで簡単に使用できるため、JSON形式によるものです。」

今日、JSONは、Webクライアントとモバイルクライアントおよびバックエンドサービス間でデータを交換するための事実上の標準です。 

JSONとXML

上記のように、JSONの主な代替手段はXMLです。ただし、XMLは新しいシステムではますます一般的になりつつあり、その理由は簡単にわかります。以下は、上記で見たデータのバージョンです。今回はXMLです。

  ジョナサン

  フリーマン

  4

  true

    スパンツリーテクノロジーグループ

      リリー

      ラクーン

XMLは、より冗長である(この場合は正確に2倍)ことに加えて、JavaScriptに適したデータ構造に解析するときにあいまいさももたらします。XMLをJavaScriptオブジェクトに変換するには、数十行から数百行のコードが必要になる可能性があり、最終的には、解析される特定のオブジェクトに基づいてカスタマイズする必要があります。JSONをJavaScriptオブジェクトに変換するには、1行のコードが必要であり、解析対象のオブジェクトに関する事前の知識は必要ありません。

JSONの制限

JSONは比較的簡潔で柔軟なデータ形式であり、多くのプログラミング言語で簡単に操作できますが、この形式にはいくつかの欠点があります。主な制限は次の5つです。 

  1. スキーマはありません。一方では、それはあなたが望む方法でデータを表現するための完全な柔軟性を持っていることを意味します。一方で、誤って形の悪いデータを非常に簡単に作成する可能性があることを意味します。
  2. 唯一の数値タイプ:IEEE-754倍精度浮動小数点形式。これは一口ですが、多くのプログラミング言語で利用できる多様で微妙な数の種類を利用できないことを意味します。
  3. 日付タイプはありません。この省略は、開発者が日付の文字列表現を使用してフォーマットの不一致を引き起こすか、エポック(1970年1月1日)からのミリ秒の形式で日付を表現する必要があることを意味します。
  4. コメントはありません。これにより、フィールドにインラインで注釈を付けることができなくなり、追加のドキュメントが必要になり、誤解される可能性が高くなります。
  5. 冗長性。JSONはXMLほど冗長ではありませんが、最も簡潔なデータ交換形式ではありません。大量のサービスや特別な目的のサービスの場合は、より効率的なデータ形式を使用する必要があります。

JSONはいつ使用する必要がありますか?

ブラウザまたはネイティブモバイルアプリケーションと通信するソフトウェアを作成している場合は、データ形式としてJSONを使用する必要があります。XMLのような形式を使用することは時代遅れの選択であり、他の方法で引き付けたいフロントエンドおよびモバイルの才能にとっては危険信号です。

サーバー間通信の場合は、ApacheAvroやApacheThriftなどのシリアル化フレームワークを使用した方がよい場合があります。ここではJSONは悪い選択ではなく、それでもまさに必要なものかもしれませんが、その答えはWebやモバイル通信ほど明確ではありません。

NoSQLデータベースを使用している場合は、データベースが提供するものにほとんど固執しています。タイプとしてJSONをサポートするリレーショナルデータベースでは、経験則として、JSONの使用をできるだけ少なくすることをお勧めします。リレーショナルデータベースは、特定のスキーマに適合する構造化データ用に調整されています。現在、ほとんどがJSON形式のより柔軟なデータをサポートしていますが、これらのJSONオブジェクト内のプロパティをクエリすると、パフォーマンスが低下することが予想されます。

JSONは、Webサーバーとブラウザーおよびモバイルアプリケーション間でデータを送信するためのユビキタスで事実上の形式です。そのシンプルなデザインと柔軟性により、読みやすく、理解しやすく、ほとんどの場合、選択したプログラミング言語で簡単に操作できます。厳密なスキーマがないため、形式の柔軟性が得られますが、その柔軟性により、JSONを正しく読み書きしていることを確認することが困難になる場合があります。

JSONパーサー

JSONとして保存されたデータをアプリケーションが使用できる形式に変換するアプリケーションのコードの部分は、パーサーと呼ばれます。JavaScriptには、ご想像のとおり、ネイティブパーサーであるJSON.parse()メソッドが含まれています。

ScalaやElmなどの強く型付けされた言語でJSONを操作するには、もう少し作業が必要になる場合がありますが、JSONが広く採用されているということは、最も難しい部分すべてを支援するライブラリとユーティリティがあることを意味します。 

json.org Webサイトには、Python、C#、COBOLなどのさまざまな言語でJSONを解析、生成、操作するために使用できるコードライブラリの包括的なリストが含まれています。

JSONユーティリティ

自分でコードを記述せずに、JSONでエンコードされたデータを直接操作または調査する場合は、役立つオンラインユーティリティが多数あります。上記にリンクされているコードライブラリ内のすべてのプログラム上の同等物ですが、JSONコードをこれらのブラウザベースのツールにカットアンドペーストして、JSONをよりよく理解したり、迅速で汚い分析を実行したりできます。

  • JSONフォーマッター: JSONLintは、任意のJSONコードをフォーマットして検証します。
  • JSONビューア: Stack.huには、JSONコードの構造を理解するのに役立つインタラクティブツリーを作成するサイトがあります。 
  • JSON Beautifier:構文の色付けなどを使用してJSONコードを「きれいに印刷」したい場合は、Prettydiffが役立ちます。 
  • JSONコンバーター:データをJSON形式から別の形式にすばやく移動する必要がありますか?Convertcsv.comには、JSONをCSV(Excelで開くことができます)またはXMLに変換できるツールがあります。

JSONチュートリアル

インタラクティブアプリケーションでJSONをどのように使用するかについて詳しく知る準備はできていますか?Mozilla Developer Networkには、JSONとJavaScriptを使い始めるための優れたチュートリアルがあります。他の言語に移行する準備ができている場合は、Java(Baeldungから)、Python(DataCampから)、またはC#(Software Testing Helpから)でJSONを使用するチュートリアルを確認してください。幸運を!

JoshFruhlingerがこの記事に寄稿しました。