JSON(ジェイソン、JavaScript Object Notation)は、JavaScriptのオブジェクトリテラル構文を基にした軽量なデータ記述言語およびデータシリアライゼーションフォーマットです。そのシンプルさと汎用性から、WebアプリケーションやAPI間のデータ交換において広く利用されています。

文法

編集

JSONは、JavaScriptの基本的なデータ型である falsenulltrueObjectArrayNumberString の7種類のリテラルを組み合わせたシリアライズ形式です( RFC 8259 )。通常、トップレベルのデータ構造は連想配列(Object)として表現されますが、仕様上は他のデータ型もトップレベルとして使用可能です。例えば、単一の falsenulltrue、あるいは数値 0 も有効なJSONデータと見なされます。ただし、Objectのキーは文字列に限定されるという制約があり、これはJavaScriptの内部オブジェクトとは異なる点です[1]

JSONのデータ構造

編集

JSONのデータ構造は、以下の要素で構成されます。

  1. オブジェクト (Object)
    • キーと値のペアの集合で構成される。
    • キーは文字列で、値は任意のJSONデータ型を取る。
    • オブジェクトは { } で囲まれ、キーと値のペアはカンマ , で区切られる。
    • キーと値のペアは キー: 値 の形式で表される。
    • 例:
    {
    "name": "John",
    "age": 30,
    "isMarried": true,
    "hobbies": ["reading", "swimming", "traveling"],
    "address": {
      "city": "Tokyo",
      "country": "Japan"
    }
    }
    
  2. 配列 (Array)
    • 値の集合で構成される。
    • 配列は [ ] で囲まれ、値はカンマ , で区切られる。
    • 配列には任意のJSONデータ型を含めることができる。
    • 例:
    ["apple", "banana", "orange", 123, {"name": "John", "age": 30}]
    
  3. 文字列 (String)
    • ダブルクォーテーション " で囲まれた文字列で表される。
    • 改行文字などの特殊文字はエスケープシーケンスを用いて表現される。
    • 例:
    "Hello, World!"
    
  4. 数値 (Number)
    • 整数または浮動小数点数で表される。
    • 例:
    123
    3.14
    
  5. 真偽値 (Boolean)
    true
    false
    
  6. 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: stringnumberobjectarraytruefalsenull のいずれかの値を表す。
  • 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}'
    

脚註

編集
  1. ^ JavaScriptに存在するBigIntSymbolなどのオブジェクトにも対応していません。

関連項目

編集

外部リンク

編集
 
Wikipedia
ウィキペディアJavaScript Object Notationの記事があります。