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日

相关文章

  • js实现带有动画的返回顶部

    这里就为你详细讲解JavaScript实现带有动画的返回顶部的完整攻略。 目录 基本思路 代码实现 示例说明 总结 基本思路 要实现返回顶部,我们可以通过设置按钮的点击事件或者监听滚动事件。而动画效果就需要用到CSS3中的transition属性。具体而言,可以通过以下步骤来实现: 设置当页面向下滚动一定的距离时,返回顶部按钮的样式显示出来; 给返回顶部按钮…

    JavaScript 2023年6月10日
    00
  • JS实现注册界面表单校验

    下面是JS实现注册界面表单校验的完整攻略: 步骤一:准备工作 在HTML页面中创建一个表单,表单中包含各种需要验证的输入框,例如:用户名、密码、邮箱等。给表单中的输入框设置相应的属性(例如:name、id、required等),方便JavaScript代码获取和操作。 步骤二:编写JavaScript代码 1. 获取表单元素 在JavaScript中通过do…

    JavaScript 2023年6月10日
    00
  • javascript中window.open在原来的窗口中打开新的窗口(不同名)

    首先,我们需要了解 window.open() 这个函数,它能打开一个新的浏览器窗口或选项卡并返回新窗口的引用。它可以传递一些参数,如新窗口的 URL、名称、大小等等。 如果我们想在原来的窗口中打开一个新的窗口,可以使用以下代码: window.open("http://www.example.com", "_self&quot…

    JavaScript 2023年6月11日
    00
  • 基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用

    让我详细讲解一下。 一、前言 本文主要介绍基于 BootStrap Metronic 开发框架中下拉列表 Select2 插件的使用。Select2 是一个基于 jQuery 的下拉列表插件,不仅支持搜索、多选等功能,还支持 Ajax 数据加载。 二、Select2 的基本使用 1. 引入 Select2 插件相关文件 在使用 Select2 插件前,需要先…

    JavaScript 2023年6月11日
    00
  • JavaScript中的正则表达式使用及验证qq号码的正则

    正则表达式是一种强大的匹配模式,它在JavaScript中得到了广泛使用。对于开发者来说,掌握正则表达式的使用和验证方法是非常重要的。本文将从JavaScript中的正则表达式基础开始,讲解如何使用正则表达式进行qq号码的验证。 正则表达式基础 正则表达式是一种字符串匹配模式。在JavaScript中,它是通过RegExp对象来创建的。正则表达式由一个模式和…

    JavaScript 2023年6月10日
    00
  • JavaScript中的LHS和RHS分析详情

    LHS和RHS分析是 JavaScript 引擎在编译或执行期间的一个步骤,用于寻找变量的值或将值赋给变量。这里的LHS和RHS代表了赋值操作(Assignment)的左值和右值。其中LHS用于对变量的赋值操作进行操作,而RHS用于对变量取值操作进行操作。 LHS查找 LHS查找是指寻找变量的容器(Container),即变量本身。在执行代码时,如果发现变量…

    JavaScript 2023年5月28日
    00
  • jQuery中json对象的复制方式介绍(数组及对象)

    当我们在编写jQuery程序时,常常需要对JSON对象进行复制的操作,这个过程有时会比较麻烦,因为JSON对象类别繁多,每种类型都需要采用不同的复制方式。 接下来,我将介绍在jQuery中对各种JSON对象进行复制的方式,包括数组和对象。 数组复制 在jQuery中,数组复制有两种方式:浅复制和深复制。 浅复制 浅复制就是将一个数组中的所有元素全部复制到另一…

    JavaScript 2023年5月27日
    00
  • JavaScript给数组添加元素的6个方法

    下面是详细讲解“JavaScript给数组添加元素的6个方法”的完整攻略。 1. 直接赋值 通过直接赋值的方式,可以给数组添加新的元素。示例如下: const arr = [1, 2, 3] // 定义一个数组 arr[3] = 4 // 直接给数组添加一个元素 console.log(arr) // [1, 2, 3, 4] 这种方式比较简单,但有一个问题…

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