JSON对象

整理自《JavaScript 标准参考教程(alpha)》,by 阮一峰

1.JSON 格式

JSON 格式是一种用于数据交换的文本格式。

符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。

每个 JSON 对象,就是一个值。每个 JSON 文档只能包含一个值。

 

JSON 对值的类型和格式有严格的规定

  1. 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。

  2. 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaNInfinity-Infinityundefined)。

  3. 字符串必须使用双引号表示,不能使用单引号。

  4. 对象的键名必须放在双引号里面。

  5. 数组或对象最后一个成员的后面,不能加逗号。

 

ES5 新增了JSON对象,用来处理 JSON 格式数据。它有两个方法:JSON.stringify()JSON.parse()

2.JSON.stringify()

JSON.stringify方法用于将一个值转为字符串。

该字符串符合 JSON 格式,并且可以被JSON.parse方法还原。

需要注意的是,对于原始类型的字符串,转换结果会带双引号。

JSON.stringify('foo') === "foo" // false
JSON.stringify('foo') === "\"foo\"" // true

上面代码中,字符串foo,被转成了""foo""

这是因为将来还原的时候,双引号可以让 JavaScript 引擎知道,foo是一个字符串,而不是一个变量名。

如果原始对象中,有一个成员的值是undefined、函数或 XML 对象,这个成员会被过滤。

var obj = {
  a: undefined,
  b: function () {}
};

JSON.stringify(obj) // "{}"

如果数组的成员是undefined、函数或 XML 对象,则这些值被转成null

var arr = [undefined, function () {}];
JSON.stringify(arr) // "[null,null]"

正则对象会被转成空对象。

JSON.stringify(/foo/) // "{}"

JSON.stringify方法会忽略对象的不可遍历属性。

3.JSON.parse()

JSON.parse方法用于将JSON字符串转化成对象。

如果传入的字符串不是有效的JSON格式,JSON.parse方法将报错。

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON</title>
</head>
<body>
<script>
    var xiaoming = {
        name : "小明",
        age : 23,
        gender : true,
        height : 1.77,
        "middle-school" : "\'w3c\' Middle School",
        skills : ["JavaScript", "Java", "Python", "Lisp"]
    };

    var str = JSON.stringify(xiaoming,null," ");
    console.log(str);
//    输出{
//        "name": "小明",
//            "age": 23,
//            "gender": true,
//            "height": 1.77,
//            "middle-school": "'w3c' Middle School",
//            "skills": [
//            "JavaScript",
//            "Java",
//            "Python",
//            "Lisp"
//        ]
//    }
    var str1 = JSON.stringify(xiaoming,["name","skills"]," ");
    console.log(str1);
//    输出{
//        "name": "小明",
//            "skills": [
//            "JavaScript",
//            "Java",
//            "Python",
//            "Lisp"
//        ]
//    }
    function convert(key, value) {
        if(typeof value === "string"){
            return value.toUpperCase();
        }
        return value;
    }

    var str2 = JSON.stringify(xiaoming,convert," ");
    console.log(str2);
//    输出{
//        "name": "小明",
//            "age": 23,
//            "gender": true,
//            "height": 1.77,
//            "middle-school": "'W3C' MIDDLE SCHOOL",
//            "skills": [
//            "JAVASCRIPT",
//            "JAVA",
//            "PYTHON",
//            "LISP"
//        ]
//    }

    //反序列化
    var str3 = JSON.parse("[1,2,3,true]");
    console.log(str3);//[1,2,3,true]
</script>
</body>
</html>

 

posted @ 2017-09-14 17:48  喵嘻嘻  阅读(325)  评论(0编辑  收藏  举报