1. 定义

stringify 函数的定义: JSON.stringify(value [, replacer [, space]])

参数:

  • value : 将要转为JSON字符串的javascript对象。
  • replacer :该参数可以是多种类型,如果是一个函数,则它可以改变一个javascript对象在字符串化过程中的行为, 如果是一个包含 String 和 Number 对象的数组,则它将作为一个白名单.只有那些键存在域该白名单中的键值对才会被包含进最终生成的JSON字符串中.如果该参数值为null或者被省略,则所有的键值对都会被包含进最终生成的JSON字符串中。
  • space :该参数可以是一个 String 或 Number 对象,作用是为了在输出的JSON字符串中插入空白符来增强可读性. 如果是Number对象, 则表示用多少个空格来作为空白符; 最大可为10,大于10的数值也取10.最小可为1,小于1的数值无效,则不会显示空白符. 如果是个 String对象, 则该字符串本身会作为空白符,字符串最长可为10个字符.超过的话会截取前十个字符. 如果该参数被省略 (或者为null), 则不会显示空白符

1.1 替换函数可以用来过滤值

  1. 返回 undefined 表示忽略该属性
  2. 返回字符串,布尔值或则数字将会被 stringify
  3. 返回对象将会触发递归调用知道遇到基本类型的属性
  4. 返回无法 stringify 的值将会被忽略
let user = {
age: 18,
name: 'tom',
email: 'tom@caonima.com'
}; function replacer(key, value) {
if (key === 'email') {
return undefined;
}
return value;
} let str = JSON.stringify(user, replacer);
// "{"age":18,"name":"tom"}"
// 过滤提取数据
let data = [
{name: "tom", sex:1, age: 18},
{name: "jerry", sex:0, age: 17},
{name: "mike", test: {age: 15}} // 数组中的嵌套属性会被过滤
]; let str = JSON.stringify(data, ["name","age"]);
console.log(str);
//[{"name":"tom","sex":1},{"name":"jerry","sex":0},{"name":"mike"}] // 处理数据
let str2 = JSON.stringify(data, function(key, val){
if(key === 'sex'){
return ['男', '女'][val]
}
return val
})
console.log(str2);
// [{"name":"tom","sex":"女","age":18},{"name":"jerry","sex":"男","age":17}]

1.2 使用 JSON.stringify() 做对象序列化

  1. undefined 值、函数或者XML值会被忽略
  2. 如果你的数组当中含有 undefined值,函数或XML值,该数组中的这些值将会被当成 null
  3. 如果属性为 null 则可以正常序列化这个属性(因为 null 可表示已经赋值,而 undefined 表示未定义、未赋值,所以执行 JSON.stringify 不会处理。)
  4. 有些属性无法被 stringify(SON 是一个通用的文本格式,和语言无关。设想如果将函数定义也 stringify 的话,如何判断是哪种语言,并且通过合适的方式将其呈现出来将会变得特别复杂。特别是和语言相关的一些特性,比如 JavaScript 中的 Symbol。)
let data = {
name: 'tom',
age: undefined,
sex: null,
fn: function() {
return true
}
}
JSON.stringify(data)
// {"name":"tom","sex":null} // 在数组中,不可被 stringify 的元素用 null 填充
let arr = [Symbol(), undefined, function() {}, "tom"];
JSON.stringify(arr);
// "[null,null,null,'tom']"

注意

  • 不是所有的合法的 JSON 都是有效的 JavaScript
  • JSON 只是一个文本格式
  • JSON 中的数字是十进制

你不知道的JSON.stringify知识点的更多相关文章

  1. 你不知道的JSON.stringify和JSON.parse

    json是JavaScript 对象表示法(JavaScript Object Notation),是一种简单的数据格式,类似于XML,其格式为名称/值对,数据用逗号隔开,名称必须用双引号括起来.例如 ...

  2. 你不知道的 JSON.stringify() 的威力

    掘进:https://juejin.im/post/5decf09de51d45584d238319?utm_source=gold_browser_extension#heading-19 gith ...

  3. 关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑

    JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反 ...

  4. json.stringify()的妙用,json.stringify()与json.parse()的区别

    一.JSON.stringify()与JSON.parse()的区别 最近做项目,发现JSON.stringify()使用场景真的挺多,我们都知道JSON.stringify()的作用是将 JavaS ...

  5. JSON.stringify() 的深入理解

    目录 序言 语法 深入理解 序言 最近在看<你所不知道的javascript>[中卷]一书,第一部分是类型和语法.本文是基于这部分的产物.在强制类型转换->抽象值操作-> to ...

  6. JSON.stringify(),JSON.parse(),toJSON()使用方法总结

    今天在看<你不知道的javascript-中>第四章‘强制类型转换’的时候,发现JSON.stringify(),JSON.parse(),toJSON()有很多细节,自己也就总结测试了一 ...

  7. JSON.parse()和JSON.stringify()

    1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...

  8. JSON.stringify()与JSON.parse()

    JSON.stringify()用于把一个对象解析成字符串,如 var student = { age: 23, name: 'wang' } JSON.stringify(student); 结果: ...

  9. ASP.NET 5 - $.ajax post JSON.stringify(para) is null

    JavaScript 代码: var para = {}; para.id = $("#ad-text-id").val(); para.title = $("#ad-t ...

随机推荐

  1. 阿里重磅开源在线分析诊断工具Arthas(阿尔萨斯)

    github地址: Arthas English version goes here. Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Art ...

  2. jsp、freemarker、velocity、thymeleaf

    1.概述在java领域,表现层技术主要有三种, (1)jsp; (2)freemarker; (3)velocity; (4)thymeleaf; 2.jsp优点: 1.功能强大,可以写java代码 ...

  3. String类型字符 常用的方法

    例子: String r=“我是谁” System.out.println(r.length())

  4. .Net MVC 标签页

    目录 Bootstrap的标签页 适合.Net MVC的标签页 Bootstrap的标签页 下面是Bootstrap的标签页,挺好的,但是用的id,内容是固定的?我不知道怎么变成不同的视图来 < ...

  5. svn服务器端—管理员分配权限

    1.SVN服务器搭建和使用 下载地址:http://subversion.apache.org/packages.html 滚动到浏览器底部,下载并安装:VisualSVN服务器端和tortoiseS ...

  6. 我的Java之路

    前言: 之前在学习python,刚开始的时候跟多数小白一样学习一些基础的知识,比如数据类型,用法,基本的语言结构,学了一段时间实在是学习不下去了,真是太TMD的无聊了,很多方法都记不住,也不知道学了这 ...

  7. 常见问题:计算机网络/运输层/UDP

    几乎不对IP增加其他东西,无连接. 优势 速度快.适合实时. 无连接建立,没有连接时延. 无连接状态. 分组首部开销小.TCP需20字节,UDP仅需8字节. 使用UDP的协议 DNS SNMP RIP ...

  8. 【GStreamer开发】GStreamer基础教程04——时间管理

    目标 本教程主要讲述一些和时间相关的内容.主要包括: 1. 如何问pipeline查询到流的总时间和当前播放的时间 2. 如何在流内部实现跳转功能 介绍 GstQuery是向一个element或者pa ...

  9. Andrew Ng机器学习课程9

    Andrew Ng机器学习课程9 首先以一个工匠为例,说明要成为一个出色的工匠,就需要掌握各种工具的使用,才能知道在具体的任务中选择什么工具来做.所以今天要讲的就是机器学习的理论部分. bias va ...

  10. 使用派生镜像(qcow2)

    当创建的虚拟机越来越多,并且你发现好多虚拟机都是同一个操作系统,它们的区别就是安装的软件不大一样,那么你肯定会希望把他们公共的部分提取出来,只保存那些与公共部分不同的东西,这样镜像大小下去了,空间变多 ...