浅谈JSON.parse()和JSON.stringify()

浅谈JSON.parse()和JSON.stringify()

JSON.parse()和JSON.stringify()是JavaScript中常用的JSON数据解析和生成方法,它们可以让我们轻松地将JavaScript的对象或数组转换为JSON格式,或者将JSON格式的数据转换为JavaScript的对象或数组。本文将从以下几个方面进行详细讲解:

  1. JSON.parse()的用法及示例
  2. JSON.stringify()的用法及示例
  3. JSON.parse()和JSON.stringify()的相互转换

1. JSON.parse()的用法及示例

JSON.parse()方法可以将JSON格式的字符串转换为JavaScript对象或数组。其语法如下:

JSON.parse(text, reviver)

其中,text参数是要解析的JSON格式的字符串,reviver参数是一个可选的函数,用来在解析这个JSON字符串的同时对它进行转换或过滤操作。如果不需要进行额外的操作,则可以将该参数设为null。下面是一个示例:

let jsonStr = '{"name":"张三","age":18,"gender":"男","hobbies":["游泳","跑步","阅读"]}';
let jsonObj = JSON.parse(jsonStr);
console.log(jsonObj.name);    // 输出 "张三"
console.log(jsonObj.age);     // 输出 18
console.log(jsonObj.hobbies); // 输出 ["游泳","跑步","阅读"]

在上面的示例中,我们将一个JSON格式的字符串转换为了JavaScript对象,并可以通过对象的属性来访问其中的数据。

此外,如果我们需要解析的JSON格式字符串比较大,也可以使用JSON.parse()方法中提供的第二个参数,即reviver函数,来对解析后的对象或数组进行过滤或转换操作。比如下面这个示例:

let jsonStr2 = '{"name":"张三","age":18,"gender":"男","hobbies":["游泳","跑步","阅读"],"birthday":"1990-01-01"}';

let dateReviver = function(key, value) {
  if (key === "birthday") {
    return new Date(value);
  } else {
    return value;
  }
};

let jsonObj2 = JSON.parse(jsonStr2, dateReviver);
console.log(jsonObj2.birthday.getFullYear()); // 输出 1990

在上面的示例中,我们定义了一个dateReviver函数,它接受两个参数key和value,用来处理JSON字符串中的每一项。当key的值为"birthday"时,我们将value值转换为一个Date对象,并返回;否则返回原始的value值。这样,我们就可以通过对象的属性来访问这个Date对象的年份。

2. JSON.stringify()的用法及示例

JSON.stringify()方法可以将JavaScript对象或数组转换为JSON格式的字符串。其语法如下:

JSON.stringify(value[, replacer[, space]])

其中,value参数是要转换的JavaScript对象或数组;replacer参数是一个可选的参数,用来控制数据转换的过程;space参数是一个可选参数,用来指定生成的JSON格式字符串的间距。默认情况下,JSON.stringify()生成的字符串是没有间距的。下面是一个示例:

let person = {
  name: "张三",
  age: 18,
  gender: "男",
  hobbies: ["游泳", "跑步", "阅读"]
};

let jsonStr = JSON.stringify(person);
console.log(jsonStr); // 输出 {"name":"张三","age":18,"gender":"男","hobbies":["游泳","跑步","阅读"]}

在上面的示例中,我们将一个JavaScript对象转换为了JSON格式的字符串,并且可以通过console.log()方法进行输出。

此外,JSON.stringify()方法还提供了一个replacer参数,它可以作为过滤或变换函数,来控制数据转换的过程。比如下面这个示例:

let person2 = {
  name: "李四",
  age: 20,
  gender: "男",
  hobbies: ["游泳", "跑步", "阅读"],
  birthday: new Date(1999, 1, 1)
};

let dateReplacer = function(key, value) {
  if (key === "birthday") {
    return value.getFullYear() + "-" + (value.getMonth() + 1) + "-" + value.getDate();
  } else {
    return value;
  }
};

let jsonStr2 = JSON.stringify(person2, dateReplacer);
console.log(jsonStr2);
// 输出 {"name":"李四","age":20,"gender":"男","hobbies":["游泳","跑步","阅读"],"birthday":"1999-2-1"}

在上面的示例中,我们定义了一个dateReplacer函数,用来格式化birthday属性的值。对于其他属性的值,我们则不做任何处理,直接返回原始值。这样,我们就可以生成JSON格式的字符串,并且在其中的birthday属性的值是经过格式化后的。

3. JSON.parse()和JSON.stringify()的相互转换

JSON.parse()和JSON.stringify()可以互相转换。即,我们可以通过JSON.stringify()方法来生成JSON格式的字符串,然后再通过JSON.parse()方法来将其转换为JavaScript对象或数组。下面是一个示例:

let person3 = {
  name: "王五",
  age: 22,
  gender: "男",
  hobbies: ["游泳", "跑步", "阅读"],
  birthday: new Date(1999, 3, 1)
};

let jsonStr3 = JSON.stringify(person3);
let newObj = JSON.parse(jsonStr3);

console.log(newObj.name);          // 输出 "王五"
console.log(newObj.age);           // 输出 22
console.log(newObj.hobbies[1]);    // 输出 "跑步"
console.log(newObj.birthday.getFullYear());  // 输出 1999

在上面的示例中,我们首先通过JSON.stringify()方法将一个JavaScript对象转换为了JSON格式的字符串,然后通过JSON.parse()方法将其转换为了一个新的JavaScript对象。可以看到,我们在新的对象中可以访问原始对象中的所有属性和值。

结语

以上就是JSON.parse()和JSON.stringify()的详细讲解和示例。希望本文可以帮助大家更好地理解和掌握这两个方法的用法和特性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈JSON.parse()和JSON.stringify() - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++实现LeetCode(123.买股票的最佳时间之三)

    下面我将从几个方面来详细讲解“C++实现LeetCode(123.买股票的最佳时间之三)”的完整攻略。 一、题目描述 本题的题目描述如下: 给定一个数组 prices ,其中 prices[i] 代表某股票在第 i 天的价格。你最多可以完成两笔交易。计算你所能获取的最大利润。注意:你不能同时参与多笔交易(即,你必须在再次购买之前卖出之前的股票)。 但是,在完…

    C 2023年5月22日
    00
  • Java Exception异常全方面分析

    Java Exception异常全方面分析 Java中异常是程序运行中发生的错误或者异常情况的标志,有时我们无法避免由于代码本身的错误或者外在因素导致程序发生异常。因此,掌握异常的相关知识,在开发过程中是非常必要的。 本文将全方面地讲解Java中异常的相关知识,包括异常的类型、异常处理、异常抛出与捕获等内容,旨在帮助Java开发者更好地理解和使用异常。 异常…

    C 2023年5月23日
    00
  • C++面向对象之类和对象那些你不知道的细节原理详解

    C++面向对象之类和对象那些你不知道的细节原理详解 什么是类 类是C++中定义自己的数据类型的方法。类可看作是一种用户自定义的数据结构。 我们可以通过定义变量来定义一个类的对象,这个对象就包含了类的属性和操作。 类的基本组成 成员变量 成员变量是类的属性,也称为数据成员、字段或属性。 相当于结构体中的成员变量,可以是任何C++数据类型,包括另一个类的对象。 …

    C 2023年5月23日
    00
  • 如何在java中正确使用注释

    下面我将详细讲解如何在Java中正确使用注释。 为什么需要注释 注释是代码中一个非常重要且必不可少的组成部分,它可以对代码进行完善的解释和说明,提高代码的可读性、可维护性和可扩展性。同时,注释还可以对代码的某些问题或待优化之处进行标注,为日后的程序优化和代码重构提供参考。 Java注释类型 Java中支持三种方式的注释: 1.单行注释 单行注释可用于在一行代…

    C 2023年5月22日
    00
  • C++实现的链表类实例

    以下是C++实现的链表类实例的完整攻略。 1. 什么是链表 链表是计算机中常用的一种动态数据结构,它通过节点之间的指针连接,可以比较方便地增、删、改、查数据。链表的节点结构一般包含两部分:数据域和指针域,数据域存储节点所存储的数据,指针域存储下一个节点的位置信息。 2. C++中实现链表类的关键 在C++中,我们可以通过定义一个链表类来实现链表的操作。链表类…

    C 2023年5月23日
    00
  • Linux C线程池简单实现实例

    下面是Linux C线程池简单实现实例的完整攻略。 1. 简介 线程池是一种常见的并发处理技术,其可以在创建一定数量的线程后,接受任务并将任务交给空闲的线程进行处理。从而减少线程创建和销毁的开销,优化了线程资源的利用。在Linux C中实现线程池,可以使用pthread库进行调用。 2. 实现过程 下面是实现Linux C线程池的步骤: 2.1 定义线程池结…

    C 2023年5月22日
    00
  • C++变量和基本类型详解

    C++变量和基本类型详解 在C++中,变量是计算机中存储和操作数据的基本单元。在使用变量时,我们需要了解变量的类型、生命周期等相关知识,才能更好地利用它们。 变量类型 C++中包含多种变量类型,包括整型、浮点型、字符型、布尔型等。 整型 整型变量用于存储整数,包括有符号和无符号两种类型。常见的整型类型有: short:短整型,占2个字节,取值范围为-3276…

    C 2023年5月22日
    00
  • FFmpeg开发笔记(一)搭建Linux系统的开发环境

    对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库。不过考虑到刚开始仅仅调用FFmpeg的API,不会马上去改FFmpeg的源码,因此只要给系统安装编译好的FFmpeg动态库,即可着手编写简单的FFmpeg程序。比如这个网站https:…

    C语言 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部