JavaScript JSON

JSON (英文全称 JavaScript Object Notation) 是用于存储和传输数据的格式。

JSON 通常用于服务端向网页传递数据 。

JSON 是一种轻量级的数据交换格式。

JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。

文本可以被任何编程语言读取及作为数据格式传递。

JSON 实例
以下 JSON 语法定义了 ​sites ​对象: 3 条网站信息(对象)的数组:

{"sites":[
    {"name":"W3Cschool", "url":"www.w3cschool.cn"}, 
    {"name":"Google", "url":"www.google.com"},
    {"name":"Taobao", "url":"www.taobao.com"}
]}

JSON 格式在语法上与创建 ​JavaScript ​对象代码是相同的。

由于它们很相似,所以 JavaScript 程序可以很容易的将 JSON 数据转换为 JavaScript 对象。

JSON 语法规则
JSON 语法规则
数据为 键/值 对。
数据由逗号分隔。
大括号保存对象
方括号保存数组
JSON 数据 - 一个名称对应一个值
JSON 数据格式为 键/值 对,就像 JavaScript 对象属性。

键/值对包括字段名称(在双引号中),后面一个冒号,然后是值:

"name":"W3Cschool"

JSON 对象
JSON 对象保存在大括号内。

就像在 JavaScript 中, 对象可以保存多个 键/值 对:

{"name":"W3Cschool", "url":"www.w3cschool.cn"}

JSON 数组
JSON 数组保存在中括号内。
就像在 JavaScript 中, 数组可以包含对象:

{"sites":[
    {"name":"W3Cschool", "url":"www.w3cschool.cn"}, 
    {"name":"Google", "url":"www.google.com"},
    {"name":"Taobao", "url":"www.taobao.com"}
]}

在以上实例中,对象 "​sites​" 是一个数组,包含了三个对象。

每个对象为站点的信息(网站名和网站地址)。

JSON.parse() 方法

JSON.parse() 方法
JSON.parse() 方法用于将一个 JSON 字符串转换为对象。
语法

JSON.parse(text[, reviver])

参数说明:

text: 必需, 一个有效的 JSON 字符串。
reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
返回值:
返回给定 JSON 字符串转换后的对象。

实例:

var text = '{"employees":[' +
    '{"name":"W3Cschool","site":"http://www.w3cschool.cn" },' +
    '{"name":"Google","site":"http://www.Google.com" },' +
    '{"name":"Taobao","site":"http://www.taobao.com" }]}';
obj = JSON.parse(text);
document.getElementById("demo").innerHTML =
    obj.employees[1].name + " " + obj.employees[1].site;

实例: 带 reviver 的案例

JSON.parse('{"p": 5, "s": 1.5, "t": -3}', function (k, v) {
    if(k === '') return v;     // 如果到了最顶层,则直接返回属性值,
    return v * 2;              // 否则将属性值变为原来的 2 倍。
});                            // {"p": 10, "s": 3, "t": -6}

如果带 reviver 函数遍历属性的顺序是从内向外的。

实例:

JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
    console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
                    // 最后一个属性名会是个空字符串。
    return v;       // 返回原始属性值,相当于没有传递 reviver 参数。
});

// 1
// 2
// 4
// 6
// 5
// 3 
// ""

JSON.parse() 不允许用逗号作为结尾

// 以下均抛出动态错误
JSON.parse("[1, 2, 3, 4, ]");
JSON.parse('{"foo" : 1, }');

看清楚,大括号内以逗号结尾了


JSON.stringify() 方法

JSON.stringify() 方法
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
语法
JSON.stringify(value[, replacer[, space]])
参数说明:

value: 必需, 要转换的 JavaScript 值(通常为对象或数组)。
replacer:可选。用于转换结果的函数或数组。如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
返回值:
返回包含 JSON 文本的字符串。

实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON.stringify() 方法</title>
</head>
<body>

<p id="demo"></p>
<script>
var str = {"name":"W3Cschool", "site":"https://www.w3cschool.cn"}
str_pretty1 = JSON.stringify(str)
document.write( "只有一个参数情况:" );
document.write( "<br>" );
document.write("<pre>" + str_pretty1 + "</pre>" );
document.write( "<br>" );
str_pretty2 = JSON.stringify(str, null, 4) //使用四个空格缩进
document.write( "使用参数情况:" );
document.write( "<br>" );
document.write("<pre>" + str_pretty2 + "</pre>" ); // pre 用于格式化输出
</script>

</body>
</html>

结果:

只有一个参数情况:
{"name":"W3Cschool","site":"https://www.w3cschool.cn"}

使用参数情况:
{
    "name": "W3Cschool",
    "site": "https://www.w3cschool.cn"
}
最后修改:2022 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏