JavaScript Object Notation
- العربية
- Azərbaycanca
- Беларуская
- Български
- বাংলা
- Català
- Čeština
- Deutsch
- Ελληνικά
- English
- Español
- Eesti
- Euskara
- فارسی
- Suomi
- Français
- Galego
- עברית
- हिन्दी
- Magyar
- Հայերեն
- Bahasa Indonesia
- Ido
- Italiano
- Qaraqalpaqsha
- 한국어
- Кыргызча
- Lietuvių
- Latviešu
- മലയാളം
- Bahasa Melayu
- Nederlands
- Norsk bokmål
- Polski
- Português
- Română
- Русский
- Simple English
- Shqip
- Српски / srpski
- Svenska
- தமிழ்
- ไทย
- Türkçe
- Українська
- Oʻzbekcha / ўзбекча
- Tiếng Việt
- 中文
- 粵語
JSON(ジェイソン、JavaScript Object Notation)は、JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語である。
特徴
JSONはウェブブラウザなどでよく使われているECMA-262, revision 3準拠のJavaScript[1] (ECMAScript)をベースとしている。2006年 7月にRFC 4627で仕様が規定され、MIMEタイプはapplication/json
、拡張子はjsonとされた。
JSONはJavaScriptにおけるオブジェクト表記法のサブセットであるが、JavaScriptでの利用に限られたものではない。
JSONは単純であるので、特にAjaxの分野で利用が広がりつつある。JavaScriptでJSONをパースして読み込むには、文字列をJavaScriptのコードとして解釈させるeval()
関数を作用させるだけでよい[2] 。このように、広く普及しているウェブブラウザ搭載言語であるJavaScriptで簡単に読み込めるが故に、Ajaxの開発者達から注目を浴びることになった。
JavaScript言語以外でのほとんどの言語において、JSONは単純な処理で書き出しや読み込むことができる。また、実装されたプログラミング言語数はYAMLより多いと言われる。そのため、JSONは異なるプログラミング言語の間でのデータの受渡しには能率的である。ウェブアプリケーションの場合において、ウェブクライアントでのJavaScriptとのデータの受渡しなどはその最たる活用例と言える。プロセス間通信、マシン間通信においても、疎結合にするため、JSONで情報を受け渡しすることもある。
表記方法
JSONで表現するデータ型は以下の通りで、これらを組み合わせてデータを記述する。true
,false
,null
などは全て小文字でなくてはいけない。
- 数値(整数、浮動小数点数)
- 文字列(バックスケープ記法を含む、ダブルクォーテーションで括った文字列)
- 真偽値(
true
とfalse
) - 配列(データのシーケンス)
- オブジェクト(キーと値のペアの集まり。JSONではハッシュと等価)
null
数値は10進法表記に限り、8進、16進法表記などはできない。また浮動小数点数としては1.0e-10
といった指数表記もできる。
文字列はJavaScriptやJavaなどで用いられている表記法で、バックスラッシュをエスケープシーケンスとして利用するUnicodeの文字列表現である。
配列はゼロ個以上の値をコンマで区切って、角括弧でくくることで表現する。例えば以下のように表現する:
["milk", "bread", "eggs"]
オブジェクト(ハッシュ)はキーと値のペアをコロンで対にして、これらの対をコンマで区切ってゼロ個以上列挙し、全体を中括弧でくくることで表現する。例えば以下のように表現する:
{"name": "John Smith", "age": 33}
ここで注意することはキーとして使うデータ型は文字列に限ることである。したがって、
{name: "John Smith", age: 33}
という表記は許されない。この後者の表記はJavaScriptのオブジェクトの表記法としては正しいが、JSONとしては不正な表記である。
エンコーディング
JSONテキストはUnicodeでエンコードするとされている(SHALL)。デフォルトのエンコーディングはUTF-8である。なお、単独の文字列でない限り最初の2文字は必ずASCII文字であるので、最初の4バイトを見ることにより、UTF-8、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BEのいずれの形式でエンコードされているか判別できる。
AjaxにおけるJSONの利用
AjaxにおいてXMLHttpRequestで非同期にJSONでのデータを受け取る例を示す:
varthe_object; http_request.open("GET",url,true); http_request.onreadystatechange=function(){ if(http_request.readyState==4){ if(http_request.status==200){ the_object=eval("("+http_request.responseText+")"); }else{ alert("There was a problem with the URL."); } } http_request=null; }; http_request.send(null);
ここでhttp_request
はXMLHttpRequestオブジェクトであり、それをurl
にアクセスして返ってきたJSONで記述されたデータをthe_object
に格納される。いま、XMLHttpRequestを用いて実装をしたが、iframeなどの他の実装方法もある。また、JavaScript ライブラリのprototype.jsではHTTPのX-JSON
ヘッダを利用して簡単にJSONデータの受渡しができる。
他のデータ記述法との関係
- XML
- JSONはXMLと違ってマークアップ言語ではない。ウェブブラウザから利用できるという点では共通している。また両者とも巨大なバイナリデータを扱う仕組みがないことが共通している。
- YAML
- JSONはYAMLのサブセットと見なしてよい[1]。YAMLにはブロック形式とインライン形式(フロー形式)の表記法があるが、JSONは後者にさらに制約を加えたものと捉えることができる。例えばRubyでは以下のようにしてJSONをYAMLとして読み込むことができる:
the_object = YAML.load('{"name": "John Smith", "age": 33}')
- 但し、厳密にはJSONはYAMLのサブセットではない[3] 。具体的には配列とハッシュの区切りをそれぞれ
,
のようにカンマ+スペースの形にしたときにのみYAMLのサブセットとなる。したがって、YAML.load
といったYAMLのルーチンを流用してJSONデータを読み込む場合は、予め区切りの文字をYAMLと互換性を保つようにしておく必要がある。
実装
JSONは多くのプログラミング言語で利用可能である。例えば、ActionScript, C, C++, C#, ColdFusion, Common Lisp, Curl (プログラミング言語), D言語, Delphi, E, Erlang, Haskell, Java, JavaScript (ECMAScript), Lisp, Lua, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Scala, Squeakなど。
関連項目
註
- ^ "Introducing JSON". json.org. 2008年4月19日閲覧。
- ^ ただし不正なデータに対する耐性から、JavaScriptでもJSON専用のパース関数が作成されている。
- ^ "the ryan king » YAML compatible JSON". 2008年4月19日閲覧。
外部リンク
- 仕様等
- Introducing JSON(英語版)
- 導入JSON(日本語版)
- RFC 4627
- その他
この項目は、コンピュータに関連した書きかけの項目 です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。