メインコンテンツへ移動

JS 学習ノート 9_JSON

無料2015-04-12#JS#json

JSON とは何か、使い方、IE サポート方法、json.js の内部実装

##1.JSON 概要

JavaScript Object Notation、JS オブジェクト表記法、(XML と同様に)データ形式の一種であり、JS と同じ構文形式を持ちます

P.S.ちょっとした歴史:JSON の父はダグラス、『JavaScript 言語精粹』の著者で、JSON 創造のインスピレーションは JS 中のリテラル表記法から来ました

##2.JSON 構文

###1.単純値の表現

例えば 3, "str", null, false など。undefined はサポートされず、文字列は必ず二重引用符を使用する必要があります(JSON には文字列を表す一重引用符の用法はありません。これは JS と異なります)

###2.オブジェクトの表現

JS オブジェクトリテラルと似ていますが、

  • 変数宣言なし

  • 末尾のセミコロンなし

  • プロパティ名は必ず二重引用符で囲む必要があります(一重引用符で書いてしまったり、引用符を忘れたりしやすい)

例えば:

{
  "name" : "ayqy",
  "sex" : "M",
  "nextSibling" : {
    "name" : "xxx",
    "sex" : "M",
    "nextSibling" : null
  }
}

###3.配列の表現

配列リテラルと似ていますが、

  • 変数宣言なし

  • 末尾のセミコロンなし

例えば:

[3, 6, false, "ayqy", {"name" : "xxx", "age" : 18}]

###4.複雑なデータ構造

配列とオブジェクトはネストを通じてより複雑なデータ構造を作成できます。例えば:

[
  1, 
  {
    "extra" : [
      6,
      {
        "id" : 5,
        "attr" : "value"
      },
      false
    ],
    "index" : 1001
  },
  2
]

##3.シリアライゼーション(JS オブジェクトから JSON へ)

[IE8+] および他の主要ブラウザには組み込み JSON オブジェクトがあり、ネイティブメソッドを呼び出して JS オブジェクトをシリアライズできます:

JSON.stringify(obj);//デフォルトルールに従ってシリアライズ。値が undefined および値が関数のプロパティは無視されます
JSON.stringify(obj, arr/fun(key, value));//一部のプロパティをフィルタリングできます(arr にリストされたプロパティのみ保持、または fun でフィルタリング)
JSON.stringify(obj, null, num/strPrefix);//フォーマットをサポート。自動改行し、各レベルを num 個のスペースでインデント、または各レベルにプレフィックス文字列を追加

[IE7-] をどのようにサポートするかについては、後で議論します

##4.パース(JSON から JS オブジェクトへ)

JSON.parse(str);//直接パース
JSON.parse(str, fun(key, value));//fun に従ってパース

[IE7-] をどのようにサポートするかについては、後で議論します

##5.クロスブラウザ JSON シリアライゼーション/パース

JSON オブジェクトをサポートしないブラウザには shim(小さな 用語)を使用できます:

ダウンロード先:https://github.com/douglascrockford/JSON-js/(ダグラス自身が作成)

簡単に言えば小型 JS ライブラリ(圧縮後 4KB のみ)で、JSON パースとシリアライゼーション機能を提供します。もちろん、JQuery を直接使用することもできます

ダグラスは追加の JSON サポートも提供しています(基本的な stringify と parse 以外):

json2.js: 組み込み JSON オブジェクトが存在しない場合、グローバルオブジェクトに JSON プロパティを追加します。プロパティ値はオブジェクトで、stringify と parse メソッドを持ちます。parse は eval メソッドでパースし、いくつかの正規表現検出を使用して、非 JSON コードの実行を防止します。現代ブラウザではこの js ファイルは何もしません。ネイティブサポートが優先されます。[IE8-] をサポートするのでなければ、これを使用しないでください。つまり、このファイルは必須ではありません。

json.js: このファイルは json2.js のすべての機能を含み、Object のプロトタイプに toJSONString メソッドと parseJSON メソッドを追加します。使用しないことをお勧めします。

json_parse.js: このファイルは parse 関数の別の実装を提供します:再帰降下(P.S. 構文解析器。。まあ、ダグラス爺さんの戦闘力はやや強い)で eval 関数を置き換えます

json_parse_state.js: このファイルは parse 関数の別の実装を提供します:ステートマシン(P.S.。。。)で eval 関数を置き換えます

cycle.js: このファイルには 2 つの関数があります:JSON.decycle と JSON.retrocycle。JSON 中の環とグラフ構造を消除/回復するために使用され、JSONPath はデータ関係を表すために使用されます

P.S.上記は readme ファイルの簡単な翻訳です

###参考資料:

コメント

コメントはまだありません

コメントを書く