浅析JSON序列化与反序列化
JSON简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。
JSON格式的数据结构包括以下几个部分:
- 数组:用方括号([])表示,里面包含一组项,各项之间用逗号隔开。
- 对象:用花括号({})表示,里面包含一组键值对,各键值对之间用逗号隔开,键和值之间用冒号隔开。
- 值:可以是字符串、数字、布尔值、null、数组或对象。
- 字符串:用双引号("")括起来的字符序列,可以包含转义字符(如回车符、制表符等)。
JSON序列化
JSON序列化是将数据从原有的数据类型转换为JSON格式的过程,一般是将复杂的对象或数组转换为JSON字符串。
在JavaScript中,可以使用JSON.stringify()方法进行JSON序列化。该方法接受一个JavaScript对象或数组作为参数,并返回一个JSON格式的字符串。例如:
var person = {
"name": "张三",
"age": 20,
"hobbies": ["游泳", "篮球"],
"address": {
"street": "江南大道",
"city": "上海",
"state": "上海市"
}
};
var jsonString = JSON.stringify(person);
console.log(jsonString);
上述代码中,我们定义了一个名为person
的对象,包含一些信息,然后使用JSON.stringify()
方法将该对象序列化为JSON字符串,最后输出结果为:
{"name":"张三","age":20,"hobbies":["游泳","篮球"],"address":{"street":"江南大道","city":"上海","state":"上海市"}}
从上述结果可以看出,对象的各个属性已经转换为了JSON格式,字符串值被加了双引号,数组和子对象都被转换为了对应的JSON格式。
JSON反序列化
JSON反序列化是将JSON格式的数据转换为原有的数据类型的过程,一般是将JSON字符串转换为JavaScript对象或数组。
在JavaScript中,可以使用JSON.parse()方法进行JSON反序列化。该方法接受一个JSON格式的字符串作为参数,并返回一个JavaScript对象或数组。例如:
var jsonString = '{"name":"张三","age":20,"hobbies":["游泳","篮球"],"address":{"street":"江南大道","city":"上海","state":"上海市"}}';
var person = JSON.parse(jsonString);
console.log(person);
上述代码中,我们定义了一个JSON格式的字符串,然后使用JSON.parse()
方法将该字符串反序列化为JavaScript对象,最后输出结果为:
{
name: '张三',
age: 20,
hobbies: [ '游泳', '篮球' ],
address: { street: '江南大道', city: '上海', state: '上海市' }
}
从上述结果可以看出,JSON字符串已经转换为了JavaScript对象,所有字符串值被去掉了双引号,数组和子对象都被转换为了对应的JavaScript对象。
示例说明
示例一
现在我们定义一个包含函数的对象,然后将其序列化成JSON字符串:
var person = {
"name": "张三",
"age": 20,
"hobbies": ["游泳", "篮球"],
"address": {
"street": "江南大道",
"city": "上海",
"state": "上海市"
},
"printInfo": function() {
console.log(this.name + "的年龄是" + this.age + "岁,爱好是" + this.hobbies.join("、") + ",住在" + this.address.city + "市" + this.address.street);
}
};
var jsonString = JSON.stringify(person);
console.log(jsonString);
运行以上代码后,会发现会报错如下所示:
TypeError: Converting circular structure to JSON
这是因为JSON序列化需要将对象的属性及其值都转换为字符串形式,而函数类型的值则无法转换为字符串。因此,如果需要序列化带有函数类型属性的对象,需要先手动将这些属性删除。
示例二
现在我们尝试将一个JSON字符串反序列化成JavaScript对象,并对其中的一些属性进行修改:
var jsonString = '{"name":"张三","age":20,"hobbies":["游泳","篮球"],"address":{"street":"江南大道","city":"上海","state":"上海市"}}';
var person = JSON.parse(jsonString);
console.log(person);
person.name = "李四";
person.age = 25;
person.hobbies.push("跑步");
person.address.city = "北京";
console.log(person);
运行以上代码后,可以看到第一个输出的结果是反序列化后的JavaScript对象,第二个输出的结果是修改后的JavaScript对象。
从以上两个示例中,我们可以看出JSON序列化与反序列化的基本使用方法,以及一些需要注意的细节。在实际开发中,JSON序列化与反序列化常被用于通过网络传输数据,或将数据存储到本地文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析JSON序列化与反序列化 - Python技术站