JSON stringify方法原理及实例解析

yizhihongxing

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日

相关文章

  • JavaScript 高级语法介绍

    JavaScript 高级语法介绍攻略 什么是 JavaScript 高级语法? JavaScript 高级语法是指相对于语言基础而言更深入、更难掌握的语言知识部分。学习 JavaScript 高级语法可以帮助开发者更加灵活地运用 JavaScript 编程语言,实现更复杂、更高级的功能。 JavaScript 高级语法包括哪些? JavaScript 高级…

    JavaScript 2023年5月18日
    00
  • JavaScript学习笔记之数组的增、删、改、查

    JavaScript学习笔记之数组的增、删、改、查 数组是JavaScript中最常用的数据结构之一,它可以存储一组数据,这组数据可以是相同类型或不同类型的值。本篇笔记将详细讲解JavaScript中数组的增、删、改、查操作。 数组的创建 在JavaScript中,可以通过以下几种方式来创建数组: 使用数组字面量语法 javascript const arr…

    JavaScript 2023年5月27日
    00
  • 微信小程序实现底部弹出框

    微信小程序实现底部弹出框的方法有多种,其中较为简便的一种是利用wepy-ui组件库中的popup组件来实现。wepy-ui是一套专为wepy框架打造的组件库,若使用其他框架或原生小程序不适用。以下是具体步骤: 1. 安装wepy-ui 使用wepy-ui组件库之前必须要先安装,可以通过npm命令安装: npm i wepy-ui -S 2. 引入popup组…

    JavaScript 2023年6月11日
    00
  • JavaScript立即执行函数与函数劫持的作用

    JavaScript立即执行函数与函数劫持是常用的一些函数技巧,可以用来实现模块化编程、实现私有变量等功能。下面我会详细讲解这两个函数技巧的使用方法及其作用。 JavaScript立即执行函数的定义及作用 JavaScript立即执行函数是指在定义之后立即执行的函数。其基本语法为: (function() { // function body })(); 这…

    JavaScript 2023年5月27日
    00
  • JavaScript知识点总结(十一)之js中的Object类详解

    下面是关于“JavaScript知识点总结(十一)之js中的Object类详解”的详细攻略。 标题 JavaScript知识点总结(十一)之js中的Object类详解 正文 1. Object类的概述 Object类是JavaScript中最常用的类之一,它是所有对象的基类。Object类有很多的内置方法和属性,能够帮助我们更方便地操作和管理JavaScri…

    JavaScript 2023年5月27日
    00
  • JQuery的ajax的用法在asp中使用$.ajax()实现

    下面我来详细讲解“JQuery的ajax的用法在asp中使用$.ajax()实现”的完整攻略。 什么是jQuery的ajax jQuery的ajax是一种用于发送和接收异步请求的技术,可以通过ajax向服务器发送请求并在不刷新页面的情况下更新数据。它可以使用多种HTTP请求方法,例如GET、POST等,并支持跨域请求和JSONP等功能。 如何在ASP中使用$…

    JavaScript 2023年6月11日
    00
  • element中的$confirm的使用

    当在Vue项目中使用Element UI组件库时,我们可以利用Element中提供的许多组件和方法,如对话框、表格、表单等。其中,$confirm方法是Element UI提供的一个强大的提示框组件,可以方便地实现弹出二次确认框,并在点击确认/取消按钮后返回用户选择的结果。下面是关于如何使用Element中的$confirm方法的详细攻略: 1. 引入Ele…

    JavaScript 2023年6月10日
    00
  • js中encode、decode的应用说明

    JS中encode、decode的应用说明 在实际开发中,我们经常会用到编码、解码这样的功能。比如将字符串进行URL编码,或者将JSON对象进行base64编码等等。在Javascript中,我们可以使用encodeURI、encodeURIComponent、decodeURI、decodeURIComponent等方法来进行编码解码的操作。 encode…

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