浅析JSON序列化与反序列化

yizhihongxing

浅析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技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • CSS3+JavaScript实现翻页幻灯片效果

    下面是详细讲解“CSS3+JavaScript实现翻页幻灯片效果”的完整攻略。 简介 翻页幻灯片是一种常见的网页轮播图效果,可以用于网站的首页展示、图片展览等场景。这种效果通过CSS3的transition属性+JavaScript的事件绑定来实现。 前置条件 在实现这种效果之前,需要掌握以下知识:- HTML5和CSS3基础知识- JavaScript基础…

    JavaScript 2023年6月11日
    00
  • yepnope.js 异步加载资源文件

    yepnope.js是一个轻量级的异步资源加载工具,可以帮助我们在加载网页中的资源文件时,进行更灵活高效的操作。下面我为大家介绍一下如何使用yepnope.js进行异步加载资源文件的操作。 安装yepnope.js yepnope.js可以通过npm安装,也可以直接在HTML文件中通过CDN链接引入。 <!DOCTYPE html> <ht…

    JavaScript 2023年5月27日
    00
  • js中window.open()的所有参数详细解析

    下面我来为你详细讲解“js中window.open()的所有参数详细解析”。 1. window.open()的用途 window.open()是JavaScript中的一个方法,它可以通过创建新的浏览器窗口或标签页来打开一个新的URL地址。 2. window.open()的语法 window.open([URL], [name], [features],…

    JavaScript 2023年6月11日
    00
  • 深入理解js数组的sort排序

    关于“深入理解js数组的sort排序”,我可以提供以下攻略: 一、sort排序的基本用法 sort是JavaScript中数组的一种方法,用于给数组排序。基本用法如下: array.sort(compareFunction) 其中,array是需要排序的数组,compareFunction是比较函数,可以是可选的。如果指定了比较函数,它将决定排序的顺序。如果…

    JavaScript 2023年5月27日
    00
  • JScript的条件编译

    JScript条件编译是一种用于限定JScript代码在不同平台或环境下执行的方法,它可以通过编译器指令来控制代码的编译或排除,这对于处理不同浏览器或操作系统上的兼容性问题非常有用。 基本语法 JScript条件编译使用如下的语法: /*@if [condition]*/ // code to evaluate if condition is true /*…

    JavaScript 2023年6月11日
    00
  • JavaScript实现简单计算器小程序

    下面是详细讲解 “JavaScript实现简单计算器小程序” 的完整攻略: 介绍 计算器小程序是一种非常常见的小型应用程序,它可以用来进行简单的算术计算。使用 JavaScript 编写一个计算器小程序的过程,可以通过不同的方法来完成,但本次教程讲解的是最基本的方法,以便初学者学习。 步骤 以下是一个基本的步骤来创建 JavaScript 计算器小程序: 步…

    JavaScript 2023年5月27日
    00
  • javascript常用正则表达式合集

    JavaScript常用正则表达式合集 正则表达式是一种强大的字符串匹配工具,可以在文本中找到特定的模式并进行替换、删除或提取操作。JavaScript常用正则表达式合集就是收集了一些在JavaScript中常见的正则表达式,让我们能够更加高效地应用正则表达式。 匹配数字 匹配数字的正则表达式可以用于验证表单中的数字输入是否合法,或者将文本中的数字提取出来作…

    JavaScript 2023年5月19日
    00
  • JavaScript setTimeout和setInterval的用法与区别详解

    JavaScript setTimeout和setInterval的用法与区别详解 setTimeout()和setInterval()是JavaScript中的两个重要函数,它们都用于实现JavaScript中的定时器。通常,我们使用这两个函数来延迟执行一段代码或者重复执行一段代码。但是setTimeout()和setInterval()用法和区别还是有很…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部