JSON

JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但是JSON是独立于语言的文本格式,尽管它的名字中有JavaScript。JSON的结构和JavaScript对象字面量非常相似,但它遵循严格的语法规则,使其成为一种数据交换语言。

JSON的主要特点包括:

  1. 键值对:JSON数据由键值对组成,键和值之间用冒号(:)分隔,键值对之间用逗号(,)分隔。
  2. 数据类型:JSON支持以下数据类型:
    • 字符串(String)
    • 数字(Number)
    • 对象(Object),在JSON中称为对象
    • 数组(Array)
    • 布尔值(Boolean),true和false
    • 空值(null)
  3. 字符串:所有的键和字符串值必须使用双引号(”)。
  4. 数组:在JSON中,数组用方括号([])表示。
  5. 对象:在JSON中,对象用花括号({})表示。
  6. 可读性:JSON的格式清晰、结构化,易于阅读和编写。
  7. 语言无关性:虽然JSON基于JavaScript,但它与JavaScript的特定功能(如函数和对象原型)无关,因此可以被许多不同的编程语言轻松解析和生成。
  8. 广泛使用:JSON在Web开发中被广泛用于前后端之间的数据交换,API响应,配置文件等。

JSON的示例:

1
2
3
4
5
6
7
8
9
10
11
12
{
"name": "John Doe",
"age": 30,
"isEmployed": true,
"skills": ["JavaScript", "JSON", "API"],
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip": "12345"
}
}

在这个示例中,我们有一个包含多个键值对的对象,其中一些值是基本数据类型,一些是数组,还有一个是嵌套的对象。JSON格式的数据可以被JavaScript轻松解析为对象,也可以被其他支持JSON的编程语言解析为相应的数据结构。

方法

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。在 JavaScript 中,JSON 对象提供了几个方法来处理 JSON 数据,主要包括 stringifyparse 方法。这些方法用于将 JavaScript 对象转换为 JSON 字符串,以及将 JSON 字符串转换为 JavaScript 对象。

1. JSON.stringify()

用途

  • 将 JavaScript 对象或值转换为 JSON 字符串。
    语法
1
JSON.stringify(value, replacer, space)
  • value:要转换的 JavaScript 对象或值。
  • replacer(可选):一个函数,用于在字符串化过程中转换值,或者一个数组,用于指定要包含在字符串化的对象中的属性。
  • space(可选):用于控制结果字符串中的空白字符,用于美化输出。
    示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const obj = {
name: 'Kimi',
age: 25,
hobbies: ['reading', 'coding', 'traveling']
};
// 基本用法
const jsonString = JSON.stringify(obj);
console.log(jsonString);
// 输出: {"name":"Kimi","age":25,"hobbies":["reading","coding","traveling"]}
// 使用 replacer 函数
const jsonStringWithReplacer = JSON.stringify(obj, (key, value) => {
if (key === 'age') {
return undefined; // 排除 age 属性
}
return value;
});
console.log(jsonStringWithReplacer);
// 输出: {"name":"Kimi","hobbies":["reading","coding","traveling"]}
// 使用 space 美化输出
const prettyJsonString = JSON.stringify(obj, null, 2);
console.log(prettyJsonString);
// 输出:
// {
// "name": "Kimi",
// "age": 25,
// "hobbies": [
// "reading",
// "coding",
// "traveling"
// ]
// }

2. JSON.parse()

用途

  • 将 JSON 字符串转换为 JavaScript 对象。
    语法
1
JSON.parse(text, reviver)
  • text:要解析的 JSON 字符串。
  • reviver(可选):一个函数,用于在解析过程中转换结果对象的属性值。
    示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const jsonString = '{"name":"Kimi","age":25,"hobbies":["reading","coding","traveling"]}';
// 基本用法
const obj = JSON.parse(jsonString);
console.log(obj);
// 输出: { name: 'Kimi', age: 25, hobbies: [ 'reading', 'coding', 'traveling' ] }
// 使用 reviver 函数
const objWithReviver = JSON.parse(jsonString, (key, value) => {
if (key === 'age') {
return value + 1; // 将 age 增加 1
}
return value;
});
console.log(objWithReviver);
// 输出: { name: 'Kimi', age: 26, hobbies: [ 'reading', 'coding', 'traveling' ] }

3. toJSON()

用途

  • toJSON 是一个方法,可以在对象上定义,用于自定义对象的 JSON 表示形式。当 JSON.stringify 调用时,会自动调用对象的 toJSON 方法(如果存在)。
    示例
1
2
3
4
5
6
7
8
9
10
const obj = {
name: 'Kimi',
age: 25,
toJSON() {
return { name: this.name };
}
};
const jsonString = JSON.stringify(obj);
console.log(jsonString);
// 输出: {"name":"Kimi"}

总结

  • JSON.stringify():将 JavaScript 对象或值转换为 JSON 字符串。
  • JSON.parse():将 JSON 字符串转换为 JavaScript 对象。
  • toJSON():自定义对象的 JSON 表示形式,用于 JSON.stringify 调用时。
    这些方法在处理 JSON 数据时非常有用,特别是在与服务器进行数据交换时。通过合理使用这些方法,可以轻松地将数据在 JavaScript 对象和 JSON 字符串之间进行转换。