示例解析Json对象Json字符串的序列化与反序列化

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已成为一种标准的数据传输格式。