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日

相关文章

  • IE8中使用javascript动态加载CSS的解决方法

    在IE8浏览器中,如果想要使用JavaScript动态加载CSS样式,可以采用以下两种方法: 方法一:使用document.createStyleSheet document.createStyleSheet是IE浏览器专门提供的一个API,可以用于动态创建样式表,并插入到页面中。它的代码如下: if(document.createStyleSheet) {…

    JavaScript 2023年5月27日
    00
  • vue3中router路由以及vuex的store使用解析

    Vue3是当前前端领域最流行的框架之一,它提供了一些重要的功能模块,如路由、状态管理等,允许我们轻松构建复杂的单页应用程序。在本篇文章中,我们将详细阐述Vue 3中Router路由以及Vuex的Store使用解析,从而帮助您快速掌握这些关键功能。 Router路由 安装和使用Router 首先让我们来介绍Vue 3中的Router路由,这是一个非常重要的功能…

    JavaScript 2023年6月11日
    00
  • 大幅提升前端工作效率!Numeral.js数值格式化库来了!

    我们日常开发中,时常会碰到数值格式化操作的场景,今天了不起就为大家分享一款相对比较全面的数值格式化的JS库:Numeral.js Numeral.js Numeral.js 是一个用来对数值进行操作和格式化的 JS 库。可将数字格式化为货币、百分比、时间,甚至是序数词的缩写(比如1st,100th)。 安装 下载到本地引入 <script src=”n…

    JavaScript 2023年5月10日
    00
  • 原生JS实现小小的音乐播放器

    原生JS实现小小的音乐播放器 概述 小小的音乐播放器是一个使用原生JS实现的简单的Web音乐播放器,由于功能简单,易于理解和操作,因此适合JS初学者学习。本攻略将分为以下几个部分: 开始 HTML结构 CSS样式 JS功能 示例说明 结束 开始 首先,我们需要一个开发环境,可以使用如下几种: Notepad++ Visual Studio Code Atom…

    JavaScript 2023年6月11日
    00
  • 小程序云开发初探(小结)

    小程序云开发初探(小结) 本文主要介绍小程序云开发的基础知识和使用方法。小程序云开发是微信小程序提供的一项新功能,可以通过云数据库、云存储和云函数来快速搭建一个完整的小程序。 1. 云开发环境配置 要使用小程序云开发,需要在微信公众平台上创建小程序,并在小程序后台开启云开发。 注册微信小程序账号 登录小程序后台,点击“设置”-“开发设置”,在云开发中开启开发…

    JavaScript 2023年6月10日
    00
  • javascript String 的扩展方法集合

    下面是关于“javascript String 的扩展方法集合”的完整攻略。 标准的 String 方法 JavaScript 中的 String 拥有许多标准的方法,例如 charAt()、substr()、slice()、toUpperCase() 等等。这些方法可以在 MDN 上找到详细的文档说明和使用示例。 扩展的 String 方法 除了标准的方法…

    JavaScript 2023年5月27日
    00
  • JS特殊函数(Function()构造函数、函数直接量)区别介绍

    JS中的函数(Function)是非常重要的概念。在JS中,有三种创建函数的方式:函数直接量、Function()构造函数和箭头函数。其中,函数直接量和Function()构造函数的功能和用法相似,但也有一些区别。 函数直接量 函数直接量是定义函数最简单的方式之一。它就是将一个函数的定义放在一个表达式中,这个表达式可以被赋值给一个变量,或者直接被调用。 函数…

    JavaScript 2023年5月27日
    00
  • 使用JavaScript通过前端发送电子邮件

    下面是“使用JavaScript通过前端发送电子邮件”的完整攻略: 1.准备工作 要通过前端使用JavaScript发送电子邮件,你需要使用邮件服务提供商的API,本文以SendGrid为例进行说明。在使用SendGrid之前,你需要完成以下准备工作: 注册SendGrid账户并创建API密钥 创建一个用于发送邮件的HTML表单 2.获取API密钥 在Sen…

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