JSON
JSON(ジェイソン、JavaScript Object Notation)は、JavaScriptのオブジェクトリテラル構文を基にした軽量なデータ記述言語およびデータシリアライゼーションフォーマットです。そのシンプルさと汎用性から、WebアプリケーションやAPI間のデータ交換において広く利用されています。
文法
編集JSONは、JavaScriptの基本的なデータ型である false
、null
、true
、Object
、Array
、Number
、String
の7種類のリテラルを組み合わせたシリアライズ形式です( RFC 8259 )。通常、トップレベルのデータ構造は連想配列(Object)として表現されますが、仕様上は他のデータ型もトップレベルとして使用可能です。例えば、単一の false
、null
、true
、あるいは数値 0
も有効なJSONデータと見なされます。ただし、Objectのキーは文字列に限定されるという制約があり、これはJavaScriptの内部オブジェクトとは異なる点です[1]。
JSONのデータ構造
編集JSONのデータ構造は、以下の要素で構成されます。
- オブジェクト (Object)
- キーと値のペアの集合で構成される。
- キーは文字列で、値は任意のJSONデータ型を取る。
- オブジェクトは
{ }
で囲まれ、キーと値のペアはカンマ,
で区切られる。 - キーと値のペアは
キー: 値
の形式で表される。 - 例:
{ "name": "John", "age": 30, "isMarried": true, "hobbies": ["reading", "swimming", "traveling"], "address": { "city": "Tokyo", "country": "Japan" } }
- 配列 (Array)
- 値の集合で構成される。
- 配列は
[ ]
で囲まれ、値はカンマ,
で区切られる。 - 配列には任意のJSONデータ型を含めることができる。
- 例:
["apple", "banana", "orange", 123, {"name": "John", "age": 30}]
- 文字列 (String)
- ダブルクォーテーション
"
で囲まれた文字列で表される。 - 改行文字などの特殊文字はエスケープシーケンスを用いて表現される。
- 例:
"Hello, World!"
- ダブルクォーテーション
- 数値 (Number)
- 整数または浮動小数点数で表される。
- 例:
123 3.14
- 真偽値 (Boolean)
true false
- null
null
で表される。- 例:
null
これらのデータ型を組み合わせることで、複雑なデータ構造を表現することが可能です。また、JSONデータを扱うための各種メソッドや関数が多くのプログラミング言語で提供されています。
JSONのEBNF
編集JSONの構文を定義するEBNF(Extended Backus-Naur Form)は以下の通りです。
object = "{" [pair *( "," pair )] "}"; pair = string ":" value; array = "[" [value *( "," value )] "]"; value = string | number | object | array | "true" | "false" | "null"; string = '"' *( char | escape ) '"'; char = unescaped | escape ( "\" / "/" / "\"" / "b" / "f" / "n" / "r" / "t" ); escape = "\\" char; unescaped = %x20-21 / %x23-5B / %x5D-10FFFF; number = [ "-" ] int [ frac ] [ exp ]; int = "0" / digit1-9 *digit; frac = "." 1*digit; exp = ("e" / "E") ["-" / "+"] 1*digit; digit = "0" / digit1-9; digit1-9 = %x31-39;
- object:
{}
で囲まれた0個以上のpair
を含むオブジェクトを表す。 - pair: キー(
string
)と値(value
)のペアを表す。 - array:
[]
で囲まれた0個以上のvalue
を含む配列を表す。 - value:
string
、number
、object
、array
、true
、false
、null
のいずれかの値を表す。 - string: ダブルクォーテーションで囲まれたUnicode文字列を表す。エスケープシーケンスもサポートされる。
- number: 10進数表記の数値を表す。負の値、小数点以下、指数表記もサポートされる。
このEBNFに基づいて、JSON形式のデータを解析するパーサーを実装することが可能です。
JavaScriptでの使用例
編集- JSONのパース:
const jsonString = '{"name": "John", "age": 30}'; const data = JSON.parse(jsonString); console.log(data.name); // "John" console.log(data.age); // 30
- JSONのシリアライズ:
const data = {name: "John", age: 30}; const jsonString = JSON.stringify(data); console.log(jsonString); // '{"name":"John","age":30}'