JavaScriptシリーズを深く理解します.「JSONオブジェクト」というものはありません.

5208 ワード

前言
この文章を書く目的はよく開発者が言っています.文字列をJSONの対象に変換し、JSONの対象を文字列に変換するなど、似たような話題があります.だから、前に収集した外国人の文章を整理して翻訳してみました.
 
本文
本論文のテーマはECMAScript 262-3に基づいて書かれたもので、2011年の262-5新規定はJSONの対象を追加しました.私たちが普段言っているJSONと関係がありますが、同じものではないです.最後の節に新しく増加したJSONの対象を紹介します.
    :http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/
多くのJavaScript開発者がJavaScriptオブジェクトの字面量(Object Literals)を間違ってJSONオブジェクト(JSON Object)と呼んでいます.彼の文法はJSON仕様に記載されていますが、JSONはデータ交換言語だけです.私達がこれをstringの文脈に使う時だけJSONといいます.
 
プロローグと反プロローグ
2つのプログラム(あるいはサーバ、言語など)が相互通信を必要とする場合、彼らはstring文字列を使用する傾向があります.複雑なデータ構造はよく使われています.中かっこ{}、小かっこ()、括弧<>とスペースで構成されています.この文字列は必要に応じて規定された文字だけです.
このために,これらの複雑なデータ構造をstring文字列として記述するために,標準的な規則と文法を定式化した.JSONはこの中の一つの文法にすぎず、対象、配列、文字列、数字、論理型、nullをstringコンテキストで記述し、プログラム間で転送し、必要なフォーマットに逆順序で並べ替えることができます.YAMLXML(甚だしきに至ってはrequest params)も流行のデータ交換のフォーマットですが、私達はJSONが好きです.私達はJavaScriptの開発者です.
 
文字の量
Mozilla Developer Centerの中のいくつかの言葉を引用して、参考にしてください.
  • 彼らは一定の値です.変数ではなく、「文字どおり」にシナリオを理解させます.(Literals)
  • 文字列の字面量は、2つの引用符(「)または1つの引用符(')に囲まれた0つ以上の文字からなります.(Strings Literals)
  • オブジェクトの字面量は、大かっこ({})で囲まれた0つ以上のオブジェクトの属性名−値ペアである.(Object Literals)
  •  
    いつがJSONで、いつがJSONではありませんか?
    JSONはデータ交換フォーマットを記述するように設計されています.彼も独自の文法を持っています.この文法はJavaScriptのサブセットです.このような声明はJavaScriptオブジェクトの字面量である可能性があります.JSON文字列はどのような文脈によって使用されますか?これはJSON文字列で、対象の文面量文脈で使うなら、対象の字面量です.
    //   JSON   var foo = '{ "prop": "val" }';
     
    //        var bar = { "prop": "val" };
     
    また、JSONは非常に厳格な文法を持っています.stringコンテキストでは、「prop」:「val」は合法的なJSONです.確かに合法的ではありません.すべての属性名とその値は二重引用符で引用しなければなりません.単引用符は使えません.また、変換後の引用符を使っても合法的ではありません.詳細な文法規則はここで確認しますまで行けます.
     
    文脈に入れて見る
    大きいやつは鼻で笑うかもしれません.JavaScriptコードは大きな文字列ではないですか?
    もちろんです.JavaScriptコードとHTML(他にもあります.)文字列です.ブラウザが彼らを解析するまでは、jfファイルやinlineのJavaScriptコードは文字列ではなく、本当のJavaScriptソースコードとして扱われています.ページ内のinterHTMLのように、文字列ではなく、DOM構造に解析されています.
    もう一度言ってください.これは文脈によって、stringの文脈で大きな括弧を持つJavaScriptのオブジェクトを使っています.それはJSON文字列です.対象の文面量の文脈で使うなら、それは対象の字面量です.
     
    本物のJSONオブジェクト
    冒頭で述べたように、オブジェクトの字面量はJSONオブジェクトではないが、本物のJSONオブジェクトがあります.しかし、両者は全く異なる概念で、新版のブラウザではJSONオブジェクトは元のオブジェクトに内蔵されています.現在はJSON.parseはJSON文字列を逆のものにするために使用されています.JSON.stringifyは対象をJSON文字列に並べ替えるために使用されています.古いバージョンのブラウザはありません.このオブジェクトをサポートしますが、Json 2.jsを通じて同じ機能を実現できます.
    まだ分からないなら、心配しないで、参考にしてください.
    //   JSON   ,   AJAX       var my_json_string = '{ "prop": "val" }';
     
    //            var my_obj = JSON.parse( my_json_string );
     
    alert( my_obj.prop == 'val' ); //     true,       ! 
    //        JSON   var my_other_json_string = JSON.stringify( my_obj );
     
    また、Paul Ireishは、Duglas CrockfordがJSON RFCにおいて「JSON Object」を使用していると言及しているが、その文脈では、「対象がJSON文字列として記述されている」という意味は、「対象文字列量」ではない.
     
    詳細
    もしあなたがもっとJSONに関する資料を知りたいなら、下の接続は絶対に役に立ちます.
  • JSON specification
  • JSON RFC
  • JSON on Wikipedia
  • JSONLINE-The JSON Validator
  • JSON is not the same as JSON
  •  
    同期と推奨
    ここではディレクトリインデックスに同期しました.JavaScriptシリーズを深く理解する
    JavaScriptシリーズの文章を深く理解して、オリジナル、翻訳、転載などの各タイプの文章を含んでいます.もしあなたに役立つなら、おじさんに書く力を貸してください.
     
    http://www.cnblogs.com/tomxu/archive/2012/01/11/2311956.html