近年、WebAPIなどインターネット上でテキストデータをまとめて扱う処理の中で、JSONが使われるケースが増えてきました。
この記事では、JSONが活用の場を広げている理由について、エンジニア以外の人にもわかりやすく解説します。
JSONは「JavaScript Object Notation」の略称です。JavaScriptはプログラミング言語の1つで、Object Notationは人間が容易に読み書きしながらデータを簡単に扱えるようにフォーマットとして構造化した記述方法を意味します。
つまりJSONは、「JavaScriptのオブジェクト表記法に由来するデータの記述方式」のことを言います。
ここではJSONの代表的な特徴と、JSONと比較されることの多いCSVやXMLとの違いについて紹介します。
JSONはテキストをベースにした、軽量なデータ交換をおこなうためのフォーマットとして作られました。名前にJavaScriptと入っているのは、開発当初はJavaScriptでの利用を前提に作られたテキストフォーマットだったためです。
データの構造が単純なため、人間が見たときに一目でわかるようになっています。またコンピュータから見た場合も、決まった形式に沿って記述されていることから、読み込んだり加工したりしやすい構造であるのが最大の特徴です。
その使いやすさからCやJava、Pythonなど、多くのプログラミング言語で広く活用されています。そのため、特定のプログラミング言語に依存しない便利なフォーマットとして認識されています。
JSONの登場以前は、CSVやXMLと呼ばれるテキストフォーマットが一般的でした。
最初に、これらのテキストフォーマットでどのようにデータが表されるのか、具体例を見てみましょう。次の3つの形式で記載したデータは、それぞれ同じ内容を示しています。
ID,Name,Height 1,Taro,160 2,Hanako,150 3,Yuji,180
<XML> <Person> <ID>1</ID> <Name>Taro</Name> <Height>160</Height> </Person> <Person> <ID>2</ID> <Name>Hanako</Name> <Height>150</Height> </Person> <Person> <ID>3</ID> <Name>Yuji</Name> <Height>180</Height> </Person> </XML>
{ [ "ID": 1, "Name": "Taro", "Height": 160 ], [ "ID": 2, "Name": "Hanako", "Height": 150 ], [ "ID": 3, "Name": "Yuji", "Height": 180 ] }
いかがでしょうか。少し見てみただけでも、記載フォーマットによって見た目の印象が大きく異なることがわかるでしょう。
続いては、上記それぞれの記載フォーマットの特徴を比較します。
|
見た目のわかりやすさ |
加工のしやすさ |
記述のしやすさ |
CSV |
× |
〇 |
△ |
XML |
〇 |
△ |
× |
JSON |
〇 |
〇 |
〇 |
それぞれを見比べると、JSONは「書きやすく読みやすい」うえに「加工しやすい」テキストフォーマットであることがわかります。ただし表計算ソフトなどで処理したい場合はあまり向いていないため、用途に応じてフォーマットを使い分けるのがよいでしょう。
続いては、JSONを実際に書いてみましょう。まずは形式を詳しくお伝えします。
JSONのもっとも基本的な形式は、データのキーと値を{ }の中にコロンで区切って記載するものです。
{"Key": "Value"}
もしデータが2つ以上ある場合は、カンマで区切ることで表現できます。
{"Key": "Value", "キー": "値", "Key1": "Value1"}
文字が長くなって読みにくい場合は、データを改行したりインデントを使ったりして見た目を変えても問題ありません。
{
"Key": "Value",
"キー": "値",
"Key1": "Value1"
}
このほかにも、JSONのデータを[ ]で囲って配列を表現したり、JSONデータの値にJSONを記述する入れ子形式にしたりなど、データの構造を柔軟に記述できるようになっています。簡単なデータの記述に慣れたら、より複雑な記述にも挑戦してみましょう。
JSONは大きく分けて6つのデータ型に対応しています。一つずつ詳しく見てみましょう。
JSONでは文字列をダブルクォーテーション(“)で囲って表します。
多くのプログラミング言語ではシングルクォーテーション(‘)でも文字列を囲えますが、JSONはダブルクォーテーションのみ使用できるようになっています。
ダブルクォーテーションで囲まれていれば、記載する文字列は日本語でも問題ありません。
{“Name”: “名前”}
数値は多くのプログラミング言語と同様に、ダブルクォーテーションでは囲わずそのまま記載します。
誤ってダブルクォーテーションで囲むと、数値を入力しても文字列と判断されてしまうため、利用時には注意が必要です。
{“Weight”: 60}
bool値は、真偽値(true/false)で表現される2つの値で構成されます。bool値も数値と同様に、ダブルクォーテーションで囲う必要はありません。
{“data”: true}
オブジェクトはJSONデータの入れ子構造となるデータです。次のように、JSONデータの中にさらにJSONデータを含むことができます。
{
“ID”: 1,
“Name”: “Taro”
“property”: {
“age”: 18,
“birth”: “2001/10/03”
}
}
ここまでくると少し複雑になりますが、区切りがわかりやすいため、データ構造は容易に把握できるでしょう。
JSONのオブジェクトは「JSONの書き方」でも紹介した通り、{ }を利用したデータ構造になっています。しかしオブジェクトの中で配列を使う場合は[ ]を使って表現します。
またデータが2件以上ある場合は、オブジェクトと同じようにカンマで区切ります。
{
“ID”: 1,
“Name”: “Taro”,
“Test_Result”: [
“Value1”,
“Value2”,
“Value3”,
“Value4”,
“Value5”
]
}
null(ヌル)はプログラミングの用語で「何もない」を意味します。JSONの中でも、該当する値がない場合などにnullを利用します。
{
“ID”: 1,
“Name”: “田中”,
“item”: null
}
続いては、プログラミング言語によってJSONがどのように使われるか、具体例を挙げながら見てみましょう。ここでは、JavaScriptを利用します。
作成したJSONファイルは、そのままではコンピュータにとっては扱いにくいものです。そのため多くのプログラミング言語では、オブジェクトと呼ばれる形式に変換して利用します。
JavaScriptでは、JSON.parse メソッドを使ってテキスト形式のJSONデータをオブジェクトに変換します。
// 最初にテキストのJSONを作成する
const json_text = '{"Name:"Taro","Age":13,"gender":"male"}';
// JSONファイルをオブジェクトに変換する
let json_object = JSON.parse(json_text);
JSONのデータは、オブジェクトに変換した後プロパティとして参照できるようになります。次の例では、オブジェクトのNameプロパティを表示します。
// オブジェクトのNameプロパティを表示
console.log(json_object.Name);
// = Taro
コンピュータでJSONデータを加工する場合は、オブジェクトに変換して利用しました。
しかし人間の目で見たり、連携するアプリケーション等に送信したりする場合には、テキストに戻した方が軽量で連携もしやすくなります。そのため多くの場合、プログラミング言語で処理したオブジェクトデータはテキストのJSONに変換されます。
オブジェクトをJSONに変換するためには、JSON.stringifyメソッドを使用します。先ほどオブジェクトに変換したデータを、テキストデータに変換してみましょう。
// オブジェクトをJSONに変換する
json_text2 = JSON.stringify(json_object);
最後に、変換したJSONデータを表示してみましょう。
// JSONデータを表示する
console.log(json_text2);
// {"Name:"Taro", "Age":13, "gender":"male"}
JSONは多くのプログラミング言語から利用できるようにライブラリが整理されており、活用の場を広げています。続いては、JSONが多くのアプリケーションで使われている理由について紹介します。
JSONはテキストのため軽量で、どのような環境でも利用しやすい特徴を持っています。テキストエディタがあればデータを作成したり修正したりできるため、特別なソフトウェア等も必要ありません。また記述方式がシンプルで、誰にでも扱いやすい構造だと言われています。
そのため経験の浅い開発者にとってもわかりやすく、学習コストを抑えられるのが大きな特徴です。あわせてデータの作成や保守・メンテナンスにかかるコストも、他の言語に比べて少ない傾向にあります。
CSVやXMLなど、JSON以外にもプログラミング言語から扱いやすくなるように設計されたデータ形式は存在します。しかし開発者とコンピュータの双方からシンプルに扱いやすい点で、JSONは優れたデータ形式と言えるでしょう。
JSONのデータはテキストであるにもかかわらず、自由度が高く柔軟に表現できます。JSONの対応しているデータ型でも紹介した通り、文字列や数値だけでなく、配列やオブジェクトのような複雑な構造を簡単に表せます。
例えば、開発者の名簿を作成するとしましょう。
{
“開発者A”: {
“Age”: 24,
“出身地”: “千葉県”,
“電話番号”: ”XXX-XXXX-XXXX”
},
“開発者B”: {
“Age”: 33,
“出身地”: “宮城県”,
“電話番号”: ”XXX-XXXX-XXXX”
},
“開発者C”: {
“Age”: 50,
“出身地”: “岡山県”,
“電話番号”: ”XXX-XXXX-XXXX”
}
}
ここで、一部のメンバーは社内の内線番号も管理するため、追加します。
{
“開発者A”: {
“Age”: 24,
“出身地”: “千葉県”,
“電話番号”: ”XXX-XXXX-XXXX”
},
“開発者B”: {
“Age”: 33,
“出身地”: “宮城県”,
“電話番号”: ”XXX-XXXX-XXXX”,
“内線番号”: “XXXX”
},
“開発者C”: {
“Age”: 50,
“出身地”: “岡山県”,
“電話番号”: ”XXX-XXXX-XXXX”
}
}
一見、不規則なデータに見えますが、JSONの形式に沿っています。このように、JSONは必要に応じてデータを追加したり減らしたりできます。新たなデータを追加する場合も、シンプルな構造のおかげで簡単に修正できるのです。
JSONはテキストで自由度の高いデータを簡単に作れます。しかし、柔軟なデータ構造を作れる反面、複雑な構造も簡単に生まれます。
データの中に配列やオブジェクトをふんだんに使おうとすると、プログラミング言語から読み込む時に繰り返し処理や入れ子のデータを読み込む回数が増えることになり、処理の回数が増加します。それによって処理時間が長くなったり、コンピュータ全体が重くなったりする可能性があるため、注意が必要です。
もっとも近年では、複雑なテキストを高速に読み込むための仕組みが登場しています。またCSVやXMLなど他のデータ形式と組み合わせることで、それぞれの得意な分野によって柔軟に使い分けるような仕組みも整備されてきました。
プログラミング言語だけでなく、データ形式も柔軟に使い分けられるとよいでしょう。
Twilio(トゥイリオ)は電話やSMS、ビデオ、チャットなど世の中にあるさまざまなコミュニケーションチャネルを、WEB・モバイルアプリケーションと繋ぐクラウドコミュニケーションAPIです。
Twilioではユーザーからのリクエストに対して、さまざまなフォーマットでレスポンスを返せます。Twilioではエンジニアの使いやすさを考慮して、標準でJSONを用いてレスポンスを受け取ることができます。