1. Json是什么?
Json全名为JavaScript Object Notation,是一种轻量级的数据交换格式,具有易读、易写的特点,常用于前后端的数据传输。Json是一个键值对的集合,用{}包含,键值对之间使用逗号分隔。
一般情况下,Json对象和Json字符串是描述同一份数据的两种形式。Json对象是指在JavaScript代码中的以字面量形式描述的对象,而Json字符串则是将对象序列化为字符串后的形式。Json对象可以通过JavaScript中的对象字面量来创建,例如:
let json_obj = {"key1": "value1", "key2": 10, "key3": true};
这里创建了一个Json对象,其中包含三个键值对,key1的值是字符串"value1",key2的值是数字10,key3的值是布尔值true。
Json字符串只是将Json对象序列化为字符串后的形式,例如:
{"key1":"value1","key2":10,"key3":true}
2. 如何序列化Json对象?
当需要将Json对象序列化为Json字符串进行传输时,就需要使用Json提供的序列化方法来实现。JavaScript中提供了一个内置对象JSON,实例上有两个方法:stringify和parse,分别用于Json序列化和反序列化。
2.1 Json序列化方法 —— JSON.stringify()
JSON.stringify()方法可以将JavaScript的值序列化为Json字符串(即将Json对象转换为Json字符串),返回序列化后的字符串。
在调用JSON.stringify()方法时可以传入两个参数,第一个参数是需要序列化的对象,第二个参数是一个可选参数,用来控制序列化过程中的一些细节。
前者是必选参数,传入需要转换成Json字符串的对象;后者是可选参数,一般也不需要传入。如果需要对输出的Json字符串进行格式化,第二个参数可以为其传递一个空格或自定义缩进字符,使得输出结果更容易阅读。
例如:
let json_obj = {"key1": "value1", "key2": 10, "key3": true};
let json_str = JSON.stringify(json_obj); // 进行序列化操作,将Json对象转化为Json字符串
代码中生成了一个Json对象,随后使用JSON.stringify()方法将其序列化并赋值给json_str变量。这时json_str已经是一个Json字符串了,可以直接输出或传输给后端进行处理。
下面来看一个具体的例子。假设要向后端发送一个包含一些订单信息的Json数据,例如:
{
"order_id": 10001,
"customer": {
"name": "Lisa",
"age": 20,
"email": "lisa@example.com"
},
"items": [
{"product": "apple", "price": 2.5},
{"product": "banana", "price": 3.0}
],
"total_price": 8.0
}
在JavaScript中,可以将该数据包装成一个Json对象,然后使用JSON.stringify()方法将其序列化为字符串:
let order_info = {
"order_id": 10001,
"customer": {
"name": "Lisa",
"age": 20,
"email": "lisa@example.com"
},
"items": [
{"product": "apple", "price": 2.5},
{"product": "banana", "price": 3.0}
],
"total_price": 8.0
};
let json_str = JSON.stringify(order_info); // 进行序列化操作,将Json对象转化为Json字符串
3. 如何反序列化Json字符串?
当从后端接收到Json字符串时,需要对其进行反序列化操作,即将Json字符串转换为对应的Json对象。同样地,JavaScript中也提供了JSON对象的parse()方法来完成该操作。
3.1 Json反序列化方法 —— JSON.parse()
JSON.parse()方法可以将字符串解析为Json对象,返回解析后的Json对象。
JSON.parse()方法只有一个参数,即需要解析的Json字符串。执行此方法时,需要保证传入参数是一个合法的Json字符串,否则会抛出异常。
例如,将序列化后的json_str变量进行反序列化操作:
let obj = JSON.parse(json_str); // 执行反序列化操作,将Json字符串转化为Json对象
代码中用JSON.parse()方法对json_str进行了反序列化操作,并将解析后的Json对象赋值给obj变量。
在JSON.parse()方法中,还可以传入一个可选参数reviver,用来在解析对象的时候进行一些自定义的操作,例如过滤一些属性或对属性值进行处理。
例如,可以将name属性值转换为大写字母:
let json_str = '{"name": "lisa", "age": 20}';
let obj = JSON.parse(json_str, (key, value) => {
if (key === 'name') {
return value.toUpperCase();
}
return value;
});
console.log(obj);
// 输出:{"name": "LISA", "age": 20}
4. 总结
以上就是Json的序列化和反序列化的基本操作。在实际开发过程中,Json作为一种轻量级的数据交换格式,具有广泛的应用,特别是前后端数据交互的过程中。对于前端开发人员,掌握Json的基本操作是非常重要的。
需要注意的是,在进行Json序列化和反序列化操作时,要保证所操作的对象或字符串符合Json的语法规范,否则会导致操作失败。
Json的优势在于其易读、易写、易解析,在前后端数据交互的过程中,Json已成为一种标准的数据传输格式。