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. 在linux的用户空间操作gpio

    1. 使能linux内核选项CONFIG_GPIO_SYSFS CONFIG_GPIO_SYSFS=y 2. 测试方法 2.1 关注/sys/class/gpio下的文件 --export/unexp ...

  2. 基本使用——OkHttp3详细使用教程

    基本使用——OkHttp3详细使用教程 转 https://blog.csdn.net/xx326664162/article/details/77714126 概述 OkHttp现在应该算是最火的H ...

  3. [转载] Ubuntu上Firefox字体太小--高分屏背锅

    版权声明:本文为CSDN博主「mythinker2」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/myth ...

  4. android 应用签名的作用

    来源:https://www.jianshu.com/p/61206c96471a 1..应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名.这是由于只有以同一个证书签名, ...

  5. osg坐标位置转换

    osg::Vec3f vec3f1 = hookNode->getBound().center(); osg::NodePathList nodePAthList1 = hookNode-> ...

  6. Python 初级 5 判断再判断

    复习: 1 三种数据类型: 整数:int, (1, 2, 200) 浮点数: float(2.0, 9.5, 100.38) 字符串: str("小明", "abc&qu ...

  7. 123457123456#2#----com.ppGame.ShiZi43--前拼后广--shizi游戏_pp

    com.ppGame.ShiZi43--前拼后广--shizi游戏_pp

  8. 报错:ModuleNotFoundError: No module named '_ctypes'

    报错背景: CentOS 7 Python3.7 安装 setuptools 插件的时候报错. 报错现象: [root@master setuptools-]# python3. setup.py b ...

  9. 报错:Error while fetching metadata with correlation id 67 : {alarmHis=LEADER_NOT_AVAILABLE}

    报错背景: 单机安装了kafka,创建完成主题,启动生产者的时候产生报错现象.报错时持续不断打印日志信息. 报错现象: [-- ::,] WARN [Producer clientId=console ...

  10. Spring Cloud简介 4.1

    什么是Spring Cloud Spring Cloud是在Spring Boot的基础上构建的,用于简化分布式系统构建的工具集.该工具集为微服务架构中所涉及的配置管理.服务发现.智能路由.断路器.微 ...