JSON stringify方法原理及实例解析

JSON stringify方法原理及实例解析

JSON.stringify() 方法概述

JSON.stringify() 方法是 JSON 对象中的方法,用于将 JavaScript 对象转换为一个字符串。它可以将一个 JavaScript 对象序列化成一个 JSON 字符串,也可以对对象进行过滤、控制转换过程以及自定义替换值等操作。

语法如下:

JSON.stringify(value[, replacer[, space]])
  • value:必需,要转换为字符串的值(通常是对象或数组)。
  • replacer:可选,如果是函数,则 JSON.stringify() 的返回值将由该函数进行转换处理;如果是数组,则只有包含在该数组中的属性才会被序列化到最终的 JSON 字符串中;如果是空格数值,则会在最终的 JSON 字符串中使用空格缩进,可以传入一个非负整数表示空格数目,或一个 string 表示缩进字符串。
  • space:可选,用于控制输出 JSON 字符串的缩进格式。

JSON.stringify() 方法原理

JSON.stringify() 的处理逻辑基于 JSON.stringify() 的参数 value,它可以是一切可序列化成 JSON 格式的值,值的序列化规则如下:
- 如果 value 是 undefined、function 或 symbol,则会被忽略掉(不会序列化)。
- 如果既不是对象也不是数组,则会被强制转换为字符串类型。
- 如果 value 是一个对象,则先调用它的 toJSON() 方法(如果存在),并以这个返回值作为 value。
- 对于数组或普通对象,JSON.stringify() 会遍历其所有可枚举的属性,根据属性本身的数据类型或者 replacer 参数的要求,将属性变成所需的形式。
- 对于某些特别的值,如 NaN、Infinity 和 -Infinity,则会被转换成 null。
- 对于 Date 类型,JSON.stringify() 默认使用toISOString() 来将日期序列化,而不会将其转换为字符串。
- 对于 RegExp 类型,除了返回 RegExp 对象实例本身外,不会有其他影响。
- 对于包含循环引用的嵌套对象或循环引用的数组元素,JSON.stringify() 会抛出一个错误。

JSON.stringify() 方法实例解析

示例一

const obj = {
  name: 'John',
  age: 25,
  country: 'USA',
  phone: {
    mobile: '1234567',
    home: '7654321'
  },
  skills: ['JavaScript', 'HTML', 'CSS'],
  salary: undefined,
  isProgrammer: true
};

const jsonString = JSON.stringify(obj, ['name', 'age', 'skills', 'isProgrammer'], 2);

console.log(jsonString);

输出结果:

{
  "name": "John",
  "age": 25,
  "skills": [
    "JavaScript",
    "HTML",
    "CSS"
  ],
  "isProgrammer": true
}

在这个示例中,我们创建了一个包含各种类型数据的对象 obj,然后使用 JSON.stringify() 方法,只序列化了 obj 对象的 name、age、skills 和 isProgrammer 属性,输出的字符串用两个空格缩进。

示例二

const obj = {
  name: 'John',
  age: 25,
  birth: new Date(1995, 1, 1),
  skills: {
    language: 'JavaScript',
    level: 'advanced'
  }
};

const jsonString = JSON.stringify(obj, function(key, value) {
  if (key === 'birth') {
    return value.getFullYear() + '-' + (value.getMonth() + 1) + '-' + value.getDate();
  } else {
    return value;
  }
}, 4);

console.log(jsonString);

输出结果:

{
    "name": "John",
    "age": 25,
    "birth": "1995-2-1",
    "skills": {
        "language": "JavaScript",
        "level": "advanced"
    }
}

在这个示例中,我们创建了一个包含 Date 类型数据、嵌套对象和键值对的对象 obj,然后创建 replacer 函数,将 obj 对象的 birth 属性转换成字符串,年月日之间用"-"分隔,输出的字符串用四个空格缩进。

结论

JSON.stringify() 方法是将 JavaScript 值序列化为 JSON 字符串的标准方法,它可以将 JavaScript 对象转换为 JSON 字符串,并允许通过控制如何序列化对象、数组和其他数据类型来扩展序列化过程。对于理解 JSON.stringify() 的使用,在 Web 开发和移动端开发中都非常有必要。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSON stringify方法原理及实例解析 - Python技术站

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

相关文章

  • vue.js利用Object.defineProperty实现双向绑定

    Vue.js是一款流行的JavaScript框架,它提供了一种简单易用的双向绑定机制。这个机制能够直接监测数据模型的变化并及时更新视图,同时也支持用户的交互操作实现数据的修改。 Vue.js采用了基于Object.defineProperty实现的双向绑定机制,通过这个机制我们可以将数据模型和视图双向绑定起来。下面我们将详细介绍这个机制的实现方法。 1、Ob…

    JavaScript 2023年6月11日
    00
  • 关于document.cookie的使用javascript

    下面我将为您详细讲解如何使用JavaScript中的document.cookie来操作cookie: 什么是cookie? Cookie是一种与特定网站相关联的小文本数据文件。在用户访问网站时,网站将Cookie存储在用户的计算机上,以便下次访问该站点时使用。它可以记录用户的各种信息,例如他们的用户名、购物车内容等。 使用document.cookie操作…

    JavaScript 2023年6月11日
    00
  • 小发现之浅谈location.search与location.hash的问题

    标题:小发现之浅谈location.search与location.hash的问题 背景介绍 location.search与location.hash是前端开发中常用的两个属性,它们分别用于获取当前url中带的查询参数和锚点参数。这两个属性的使用方式不同,而且在某些情况下会出现一些问题,需要特别注意。 location.search与location.ha…

    JavaScript 2023年6月11日
    00
  • 详解JS HTML Web端使用MQTT通讯测试

    下面是“详解JS HTML Web端使用MQTT通讯测试”的完整攻略: 一、MQTT介绍 即消息队列遥测传输(Message Queue Telemetry Transport,缩写为MQTT)是一个开放的物联网协议,由IBM于1999年开发。它是一个非常轻量的通讯协议,适合于各种网络连接条件下的物联网设备之间的消息通讯。同时,MQTT协议可以和HTTP和W…

    JavaScript 2023年5月27日
    00
  • Javascript Math LOG10E 属性

    JavaScript中的Math.LOG10E属性是一个常数,表示以10为底的自然对数e的对数。以下是关于Math.LOG10E属性的完整攻略,包含两个示例。 Math对象的LOG10E属性 JavaScript Math对象中的LOG10E属性是一个常数,表示以10为底的自然对数e的对数。 下面是LOG10E属性语法: Math.LOG10E 下面是一个L…

    JavaScript 2023年5月11日
    00
  • 一文带你理解JavaScript中的函数式编程

    “一文带你理解JavaScript中的函数式编程”的完整攻略 什么是函数式编程? 函数式编程是一种编程范式,它将计算机程序看作一系列数学函数的组合,避免使用共享状态和可变数据,通过数据不可变和函数无副作用的特性实现函数的组合和复用。JavaScript原生支持函数式编程,在近年来的JavaScript开发中也越来越普遍。 函数式编程的特点 函数是一等公民:函…

    JavaScript 2023年5月27日
    00
  • js与applet相互调用的方法

    我来为你介绍一下「JavaScript 与 Applet 相互调用的方法」。 什么是 Applet 首先,我们需要了解一下什么是 Applet。Applet 是 Java 语言编写的小型应用程序,其本质是 Java 类,可在 Web 浏览器或其他支持 Java 虚拟机的环境下运行。由于 Applet 的本质是 Java 类,因此 Applet 也可以和 Ja…

    JavaScript 2023年5月27日
    00
  • es6中的解构赋值、扩展运算符和rest参数使用详解

    关于ES6中的解构赋值、扩展运算符和rest参数使用详解,具体内容如下: 一、解构赋值 解构赋值是ES6最常用的功能之一,可以快速的将数组或对象中的值,直接赋值给变量。示例如下: 1.1 数组解构赋值 const arr = [1, 2, 3]; const [a, b, c] = arr; console.log(a, b, c); // 输出: 1, 2…

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