【25】JSON

4065 ワード

JSONはJavaScript Object Notationの略で、データ交換形式です.JSONが登場するまで、XMLは純粋なテキスト形式なので、ネットワーク上でデータを交換するのに適していました.XML自体は複雑ではありませんが、DTD、XSD、XPath、XSLTなどの複雑な規範を加えると、正常なソフトウェア開発者がXMLに会うと頭が大きくなります.最後に、何ヶ月も研究していても、XMLの規範が明らかになるとは限らないことがわかりました.ついに2002年のある日、ダグラス・クロークフォード(Douglas Crockford)さんは水深火熱に陥りながら、ある巨大なソフトウェア企業に長期にわたって愚弄されていたソフトウェアエンジニアを救うために、JSONという超軽量級のデータ交換フォーマットを発明した.ダグラスさんは長期にわたってヤフーの高級アーキテクチャ師を務めており、JavaScriptに夢中になっている.彼が設計したJSONは実際にJavaScriptのサブセットであり、JSONでは、これらのデータ型がいくつかあります.
  • number:JavaScriptのnumberと完全に一致します.
  • boolean:JavaScriptのtrueまたはfalseです.
  • string:JavaScriptのstringです.
  • null:JavaScriptのnullです.
  • array:JavaScriptのArray表現---[];
  • object:JavaScriptの{...}表示形式.

  • および上の任意の組み合わせ.さらに、JSONは文字セットがUTF-8でなければならないことを決め、多言語であれば問題ないことを示した.解析を統一するために、JSONの文字列は二重引用符「」を用いなければならず、Objectのキーも二重引用符「」を用いなければならない.JSONは非常に簡単で、すぐにWeb世界を風靡し、ECMA標準となり、ほとんどのプログラミング言語がJSONのライブラリを解析しなければならないが、JavaScriptではJSONを直接試用することができるため、JavaScriptにはJSONの解析が内蔵されている.JavaScriptオブジェクトがJSONになると、そのオブジェクトをJSON形式の文字列にシーケンス化し、ネットワークを介して他のコンピュータに渡すことができます.JSON形式の文字列を受け取り、JavaScriptオブジェクトに逆シーケンスするだけでJavaScriptで直接使用できます.
    シーケンス化
    まず、明ちゃんというオブジェクトをJSON形式の文字列にシーケンス化しましょう.
    var.xiaoming = {
        name: '  ',
        age: 14,
        height: 1.65,
        grade: null,
        'middle-school': '\"W3C\"Middle School',
        skills: ['JavaScript', 'Java', 'Python', 'Lisp']
    };
    
    JSON.stringify(xiaoming):  // '{"name":"  ","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'
    

    きれいに出力するには、パラメータを加えてインデント出力を押します.
    JSON.stringify(xiaoming, null, '  ');
    

    結果:
    {
        "name": "  ",
        "skills": [
          "JavaScript",
          "Java",
          "Python",
          "Lisp"
        ]
    }
    

    オブジェクトの各キー値ペアが関数によって先に処理されるように、関数を入力することもできます.
    function convert(key, value) {
        if (typeof value === 'string') {
            return value.toUpperCase();
        }
        return value;
    }
    
    JSON.stringify(xiaoming, convert, '  ');
    

    上のコードはすべての属性値を大文字にします.
    {
        "name": "  ",
        "age": 14,
        "height": 1.65,
        "grade": null,
        "middle-school": "\"W3C\"MIDDLE SCHOOL",
        "skills": [
            "JAVASCRIPT",
            "JAVA",
            "PYTHON",
            "LISP"
        ]
    }
    

    また、明ちゃんのシーケンス化方法を正確に制御したい場合は、xiaomingにtoJSON()の方法を定義し、JSONがシーケンス化すべきデータを直接返すことができます.
    var xiaoming = {
        name: '  ',
        age: 14,
        gender: true,
        height: 1.65,
        grade: null,
        'middle-school': '\"W3C\" Middle School',
        skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
        toJSON: function() {
            return {  //    name age,      key;
                'Name': this.name,
                'Age': this.age
            };
        }
    };
    
    JSON.stringify(xiaoming);  // '{"Name": "  ", "Age": 14}'
    

    逆シーケンス化
    JSON形式の文字列を手に入れて、私たちは直接JSONを使います.parse()はJavaScriptオブジェクトにします.
    JSON.parse('[1, 2, 3, true]');  // [1, 2, 3, true]
    JSON.parse('{"name":"  ","age":14}');  //Object {name: '  ', age:14}
    JSON.parse('true');  // true
    JSON.parse('123.45');  // 123.45
    

    JSON.parse()は、解析されたプロパティを変換するための関数を受信することもできます.
    JSON.parse(' {"name":"  ","age":14}', function (key, value) {
        //  number * 2:
        if (key === 'name') {
            return value + '  ';
        }
        return value;
    });  // Object {name: '    ', age: 14}
    

    JavaScriptでJSONを使うのは、こんな簡単!