JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。
浅析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序列化与反序列化
- jQuery实现的自定义轮播图功能详解 2024-01-02
- 使用HTML5原生对话框元素并轻松创建模态框组件 2023-12-23
- Vue简单到复杂,了解到熟悉 2023-10-08
- 使用fileReader的一个坑及解决 2023-08-11
- window.onerror()的用法与实例分析 2023-12-25
- 按钮的Ajax请求时一次点击两次提交的解决方法 2023-01-21
- 一款纯css3实现的鼠标经过按钮特效教程 2024-01-05
- 关于前端ajax请求的优雅方案(http客户端为axios) 2023-02-15
- WKHTML Windows PHP 2023-10-25
- HTML学习笔记(第五天) 2023-10-27