20.JSON

JSON是javascript的一个子集,利用js中的一些儿模式来表示结构化数据。不是只有javascript才使用JSON,JSON是一种数据格式,很多编程语言都有针对JSON的解析器和序列化器。

JSON的语法可以表示一下三种类型的值:

  • 简单值:可以在JSON中表示字符串、数值、布尔值和null ; 但不支持js中的特殊值 undefined 

  • 对象:表示的是一组有序的键值对儿

  • 数组:表示的是一组有序的值得列表


简单值:

-数值(整数或者浮点数 

-字符串(必须在引号里)

-布尔值

-null

对象值:

    javascript中的对象字面量:

var person = {
    name:"Zhou",
    age:29
};

json中的对象要求必须给属性加引号,如下:

{
    "name":"Zhou",
    "age":29
}

JSON中没有变量的概念,其次末尾不用分号。属性的值可以是简单值,也可以是复杂类型值,可以在对象中嵌入对象:

{
    "name":"Zhou",
    "age":29,
    "school":{
         "name":"XXX College",
         "address":"XXXXXXXXXX"
    }
}


数组:

JSON数组采用的及时JS里的数组字面量形式

[ 25, "age", true ]

同样没有变量和分号。



JSON对象有两个方法:stringify() 和 parse(),这两个方法 分别用于把javascript对象序列化为JSON字符串解析为javascript值。

var people = { 
    name:"小明",
    age:25,
    friends:[
          "小红",
          "小兰"
    ]   
}
var json = JSON.stringify(people);
alert(json);  

// 返回结果:{"name":"小明","age":25,"friends":["小红","小兰"]}

上面例子JSON.stringify()把一个javascript对象序列化为一个JSON字符串,然后将它保存在变量json中。默认请款下,输出的JSON字符串不包含任何空格字符或缩进。

在序列化javascript对象是,所有函数及原型成员都会被有意忽略,值为undefined的任何属性也会被跳过。


将JSON字符串直接传递给JSON.parse()就可以得到相应的javascript的值。




JSON除了序列化javascript对象外,还可以接受多个参数。

第二个参数可以是个数组,也可以是函数:

var people = { 
    name:"小明",
    age:25,
    friends:[
          "小红",
          "小兰"
    ]   
}
var json = JSON.stringify(people,["name","friends"]);
alert(json);  

//返回结果:{"name":"小明","friends":["小红","小兰"]}


如果第二个参数是函数:

        var people = { 
                name:"小明",
                age:25,
                friends:[
                      "小红",
                      "小兰"
                    ]   
        }
        var json = JSON.stringify(people,function(key,value){
            switch(key){
                case "name": 
                    return "小军";
                case "age": 
                    return 20;
                case "friends": 
                    return null;
                default: 
                    return value;
            }
        });
        alert(json);
        
        //返回结果:{"name":"小军","age":20,"friends":null}


第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示缩进的空格数,最大缩进空格数为10,所有大于10的值都会自动转换为10。只要传入有效的数值,结果字符串就会包含换行符。

如果缩进参数是字符串而非数值,则这个字符将在JSON字符串中被用作缩进字符,缩进字符串最长不能超过10个字符长,超过10个结果中将出现前10个字符。

        var people = {         
            name:"小明",
            age:25,
            friends:[
                  "小红",
                  "小兰"
            ]   
        }
        var json = JSON.stringify(peopl,null,10);
        //var json = JSON.stringify(peopl,null,"hello");
        alert(json);


 






原文地址:https://www.cnblogs.com/afighter/p/5447991.html