浅析JSON序列化与反序列化

浅析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日

相关文章

  • ajax实现加载数据功能

    下面是“ajax实现加载数据功能”的完整攻略: 什么是 AJAX? Ajax即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML)。Ajax 可以在不重新加载整个网页的情况下,请求服务器返回不同的数据。比如,在一个搜索页面中,当用户输入关键字搜索时,可以通过 Ajax 在不刷新页面的情况下返回相应的搜索…

    JavaScript 2023年6月11日
    00
  • 原生js实现简单轮播图效果

    下面我来详细讲解如何用原生JS实现简单轮播图效果。 步骤1:HTML结构 我们首先需要在HTML文件中创建轮播图的骨架,通常可以使用<ul>标签和若干个<li>标签来实现。例如: <div id="slider"> <ul> <li><img src="slide…

    JavaScript 2023年6月11日
    00
  • Marked.js让您的文档编辑更加轻松自如

    ​ 低代码应用平台——kintone既可以保留更改记录,也有流程管理的功能,在公司内部分享会议记录啊、wiki等文档或学习资料等时非常的便利。 kintone还有丰富的文本编辑框,可以对内容进行编辑提高易读性。但是还是有不少人觉得如果能够使用Markdown编辑,将更加轻松,文本也将更加美观。※特别受程序员的欢迎:) 这次就向大家介绍如何使用Cybozu C…

    JavaScript 2023年5月8日
    00
  • javascript 冒号 使用说明

    下面是关于 JavaScript 冒号的使用说明: 什么是冒号 在 JavaScript 中,冒号(:)在对象字面量中用来分隔属性名和属性值,在 ES6 中则有更多的使用方式。下面我们来逐一讲解。 对象字面量 在对象字面量中,冒号用来分隔属性名和属性值。举个例子: const person = { name: ‘Tom’, age: 18 } 在这个例子中,…

    JavaScript 2023年6月11日
    00
  • javascript异步编程

    下面我会来详细讲解“JavaScript 异步编程”的完整攻略,包括基本概念、异步编程方式、回调函数、Promise、async/await 等。 基础概念 在学习异步编程之前,我们需要了解以下几个基础概念: 同步代码 同步代码指的是按照代码的书写顺序,依次执行的代码,一行代码的执行需要等待上一行代码的执行完成。 console.log(‘start’); …

    JavaScript 2023年5月18日
    00
  • 创建echart多个联动的示例代码

    创建 ECharts 多个联动的示例代码需要以下几个步骤: 引入 ECharts 的资源文件 首先,在你的 HTML 文件中,需要按照以下方式引入 ECharts 的资源文件: <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.0/dist/echarts.min.js"&g…

    JavaScript 2023年6月10日
    00
  • JavaScript之生成器_动力节点Java学院整理

    JavaScript之生成器_动力节点Java学院整理 生成器是什么? 生成器是可以随时随地暂停和继续执行的函数。在调用生成器函数时,不会立即执行函数,而是返回一个代表该生成器的对象,使用该对象可以随时暂停和继续执行函数。 如何创建生成器? 使用关键字function*创建生成器函数。如下所示: function* generateSequence() { …

    JavaScript 2023年6月11日
    00
  • Javascript 中创建自定义对象的方法汇总

    让我们来详细讲解一下 “Javascript 中创建自定义对象的方法汇总”。 一、引言 自定义对象是 JavaScript 中最重要的一个概念之一。JavaScript 中有多种创建自定义对象的方法,这些方法都可以用来创建具有特定属性和行为的对象。在本文中,我们将讨论以下方法: 工厂模式 构造函数模式 原型模式 组合模式 原型式继承 寄生式继承 组合继承 二…

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