Javascript-JSON

4249 ワード

一、文法
JSONの文法は以下の3つのタイプの値を表すことができます.
  • 単純値:JavaScriptと同じ文法を使用して、JSONに文字列、数値、ブール値、nullを表すことができます.しかし、JSONはJavaScriptの特殊値undefinedをサポートしていません.
  • オブジェクト:オブジェクトは複雑なデータタイプとして、無秩序なキーペアのセットを表しています.各キーのペアの中の値は単純な値でもいいし、複雑なデータタイプの値でもいいです.
  • 配列:配列は複雑なデータタイプであり、順序正しい値のセットを表すリストであり、数値インデックスによってその値にアクセスすることができる.配列の値は任意の種類であっても良いです.単純な値、オブジェクト、または配列です.
  • 1、単純値
    JSONは文字列の方式を表します.
    "Tom"
    
    2、オブジェクト
    JSONの対象とJavaScriptの字面量は少し違っています.以下はJavaScriptの対象文字の量です.
    var person = {
        name:"Tom",
        age:26
    };
    
    JSONのオブジェクト:
    //JSON    
    {
        "name":"Tom",
        "age":26
    }
    
    JSONのオブジェクトはJSのオブジェクトと比較して以下の3つの違いがあります.3、オブジェクトの属性には、二重引用符が必要です.
    3、配列
    JSON配列はJavaScriptの配列字面量の形式を採用しています.
    var values = [24, "hi", true];
    
    JSONの配列:
    // JSON    
    [23, "hi", true]
    
    同様に、JSON配列にも変数やセミコロンがありません.
    二、解析と序列化
    1、JavaScriptオブジェクトをJSON文字列に並べ替える
    var book = {
        title:"Professional JavaScript",
        authors:["Tom"],
        edition:5,
        year:2015
    };
    var jsonText = JSON.stringify(book);
    
    JSON.stringify(object[, replacer][, space])この方法は、3つのパラメータのうちの1つ目のパラメータが受信対象であり、2番目のパラメータがフィルタであり、1つの配列であっても良いし、1つの関数であっても良い.3番目のパラメータはJSON文字列にインデントを保持するかどうかを示すオプションです.
  • フィルタ結果
  • 2番目のパラメータが配列である場合、すなわちフィルタパラメータが配列である場合、JSON.strigify()の結果には配列内の属性のみが含まれます.
    var book = {
        title:"Professional JavaScript",
        authors:["Tom"],
        edition:5,
        year:2015
    };
    var jsonText = JSON.stringify(book,["title","year"]);
    console.log(jsonText); //{"title":"Professional JavaScript","year":2015}
    
  • 第二のパラメータが関数である場合
  • 
    
        
            
        
        
    
    var book = {
        title:"Professional JavaScript",
        authors:["Tom","Jerry"],
        edition:5,
        year:2015
    };
    var jsonText = JSON.stringify(book,function(key,value){
        switch(key){
            case "authors":
                return value.join(",")
            case "year":
                return 5000;
            case "edition":
                return undefined;
            default:
                return value;
        }
    });
    console.log(jsonText); //{"title":"Professional JavaScript","authors":"Tom,Jerry","year":5000}
    
        
    
    
  • 文字列は、JSON.strigify()方法の第3のパラメータをインデントと空白文字列にインデントし、このパラメータが数値であれば、各レベルのインデントされたスペース数
  • を表します.
    var book = {
        "title":"Professional JavaScript",
        "authors":["Tom"],
        edition:5,
        year:2015
    };
    var jsonText = JSON.stringify(book, null, 4);
    console.log(jsonText);
    
    {
        "title": "Professional JavaScript",
        "authors": [
            "Tom"
        ],
        "edition": 5,
        "year": 2015
    }
    
  • toJSON
  • var book = {
        "title":"Professional JavaScript",
        "authors":["Tom"],
        edition:5,
        year:2015,
        toJSON:function(){
            return this.title;
        }
    };
    var jsonText = JSON.stringify(book);  
    console.log(jsonText);  //"Professional JavaScript"
    
    トップクラスのオブジェクトです.結果はundefinedです.toJSON()は関数フィルタの補足として利用できるので,逐次化の内部秩序を理解することが重要である.一つのオブジェクトをJSON.strigifyに導入すると仮定し、そのオブジェクトの順序は以下の通りである.(1)toJSON()法があり、かつ有効な値を得ることができる場合は、この方法を呼び出す.さもないと、オブジェクト自体に戻ります.(2)2番目のパラメータが提供される場合は、この関数フィルタを適用します.着信関数フィルタの値は、(1)ステップ目の値です.(3)ステップ(2)で返した各値に対して、対応する順序付けを行う.(4)第3のパラメータが提供された場合、対応するフォーマットが実行されます.
    JSON文字列をJavascriptオブジェクトに解析するJSON.parse()
    
    
        
            
        
        
    
        var book = {
            "title":"Professional JavaScript",
            "authors":["Tom","Jerry"],
            edition:5,
            year:2015,
            releaseDate:new Date(2011,11,1)
        };
        var jsonText = JSON.stringify(book);
        var bookCopy = JSON.parse(jsonText,
            function(key, value){
                if(key == "releaseDate"){
                    return new Date(value);
                }else{
                    return value;
                }
        });
        alert(bookCopy.releaseDate.getFullYear()); //2011