Json语法及使用

Json简介

JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。

Json语法

JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组

JSON 值

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

例如:
对象:

{
    "name": "Jack",
    "age": 26,
    "sex": "男",
    "students": [{
            "name": "jam",
            "age": 16,
            "sex": "男"
        },
        {
            "name": "lucy",
            "age": 16,
            "sex": "女"
        }
    ]
}
  • Json的key必须是字符串,value可以是Json允许的任意类型。
  • key和value之间用冒号隔开。
  • 键值对之间用逗号隔开。

JSON 文件

  • JSON 文件的文件类型是 “.json”
  • JSON 文本的 MIME 类型是 “application/json”

JSON的使用

JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

JSON.parse()

JSON.parse() 方法把JSON文本转换为JavaScript 对象。

语法

JSON.parse(text[, reviver])

参数

  • text:必需。一个有效的 JSON 字符串。
  • reviver:可选。规定了原始值在被返回之前如何被解析改造,将为对象的每个成员调用此函数。 如果成员包含嵌套对象,则先于父对象转换嵌套对象。 更具体点讲就是:解析值本身以及它所包含的所有属性,会按照一定的顺序(从最最里层的属性开始,一级级往外,最终到达顶层,也就是解析值本身)分别的去调用 reviver 函数,在调用过程中,当前属性所属的对象会作为 this 值,当前属性名和属性值会分别作为第一个和第二个参数传入 reviver 中。如果 reviver 返回 undefined,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值会成为当前属性新的属性值。

例如:

<script>
        var str = '{"peoples":[{"name":"lucy","sex":1},{"name":"jams","sex":0}]}';
        var obj = JSON.parse(str, function(key, value){
            if(key === 'sex') {
                return value == 1 ? '女' : '男';
            } else {
                return value;
            }
        });
        console.info(obj);
        var obj = JSON.parse(str, function(key, value){
            console.log(key);   // 输出当前的属性名,从而得知遍历顺序是从内向外的,最后一个属性名会是个空字符串。
            return value;
        });
</script>

图1
提示:
可以使用内建的eval()函数来生成JavaScript对象。例如:

        var str = '{"peoples":[{"name":"lucy","sex":1},{"name":"jams","sex":0}]}';
        var obj = eval("(" + str + ")");//必须把JSON字符串包含在括号中
        console.info(obj);

图2

但是eval() 函数会编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。

使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。

在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。

JSON.stringify()

JSON.stringify() 方法将 JavaScript 对象转换为字符串。

语法

JSON.stringify(value[, replacer [, space]])

参数

  • value:必需, 一个有效的 JSON 对象。
  • replacer:可选。用于转换结果的函数或数组。如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串。如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。
  • space:可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;

示例:
当replacer为数组时:

        var str = '{"peoples":[{"name":"lucy","sex":1},{"name":"jams","sex":0}]}';
        var obj = eval("(" + str + ")");
        var newStr = JSON.stringify(obj,["peoples","name"]);
        console.info(newStr);

结果:

{"peoples":[{"name":"lucy"},{"name":"jams"}]}

当replacer为函数时:

        var str = '{"peoples":[{"name":"lucy","sex":1},{"name":"jams","sex":0}]}';
        var obj = eval("(" + str + ")");
        var newStr = JSON.stringify(obj,function(key, value){
            if(key === 'sex') {
                return value == 1 ? '女' : '男';
            } else {
                return value;
            }
        });
        console.info(newStr);

结果:

{"peoples":[{"name":"lucy","sex":"女"},{"name":"jams","sex":"男"}]}

使用space美化JSON字符串:

        var str = '{"peoples":[{"name":"lucy","sex":1},{"name":"jams","sex":0}]}';
        var obj = eval("(" + str + ")");
        var newStr = JSON.stringify(obj,"","\t");
        console.info(newStr);

结果:

{
    "peoples": [
        {
            "name": "lucy",
            "sex": 1
        },
        {
            "name": "jams",
            "sex": 0
        }
    ]
}

JSON.stringify() 方法在使用replacer参数时,是从最外层开始遍历属性的。

        var str = '{"peoples":[{"name":"lucy","sex":1},{"name":"jams","sex":0}]}';
        var obj = eval("(" + str + ")");
        var newStr = JSON.stringify(obj,function(key, value){
            console.info(key);
            return value;
        },"\t");

图3

如果replacer函数返回undefined,该属性值不会在JSON字符串中输出。

        var str = '{"peoples":[{"name":"lucy","sex":1},{"name":"jams","sex":0}]}';
        var obj = eval("(" + str + ")");
        var newStr = JSON.stringify(obj,function(key, value){
            if(key === 'sex') {
                return undefined;
            } else {
                return value;
            }
        },"\t");
        console.info(newStr);

结果:

{
    "peoples": [
        {
            "name": "lucy"
        },
        {
            "name": "jams"
        }
    ]
}

猜你喜欢

转载自blog.csdn.net/maijia0754/article/details/79634042
今日推荐