参考文章:https://juejin.cn/post/6844903711127404557

在前端开发过程中,有两个非常有用的方法来处理 JSON 格式的内容:

  • JSON.parse(string) :接受一个 JSON 字符串并将其转换成一个 JavaScript 对象。--
  • JSON.stringify(obj) :接受一个 JavaScript 对象并将其转换为一个 JSON 字符串。

一、JSON.stringify()

序列化字符串:
JSON.stringify({name: "Xiaoming",age: 12});
// 输出结果: "{"name":"Xiaoming","age":12}" JSON.stringify([1,2,3,4,5])
// 输出结果: "[1,2,3,4,5]" JSON.stringify("abc123")
// 输出结果: "abc123"

格式化特殊值:

console.log(JSON.stringify(undefined));
// 输出为原生undefined,但不是字符串 console.log(JSON.stringify(null));
// 输出为字符串的"null" console.log(JSON.stringify(false));
// 输出为字符串的"false" console.log(JSON.stringify(NaN));
// 输出为字符串的"NaN" const user = {
name: undefined,
age: NaN,
sex: false,
address: null
}
console.log(JSON.stringify(user))
// 输出{"age":null,"sex":false,"address":null} const arr = [undefined, null, false, NaN, ""]
console.log(JSON.stringify(arr));
// 输出[null,null,false,null,""]

可以看到对象中的undefined值会被忽略。而在数组中,特殊值都会变成null

忽略不可遍历的属性

如果使用Object.defineProperties定义对象,并对其中的属性设置不可枚举,则JSON在序列化的时候会忽略该值

var obj = {};
Object.defineProperties(obj, {
'foo': {
value: 1,
enumerable: true
},
'bar': {
value: 2,
enumerable: false
}
}); JSON.stringify(obj); // {"foo":1}
指定需要格式化的属性

JSON.stringify方法还可以接受一个数组参数,指定需要转成字符串的属性

JSON.stringify({ a:1, b:2 }, ['a'])
// {"a":1}

第二个参数以函数为参数,处理格式化的行为

const student = {
name: 'xiaoming',
age: 13,
score: 50,
} const stringifyFn = (a,b,c) => {
if(b.score <= 50){
b.score = b.score * 2;
}
return b
}
console.log(JSON.stringify(student,stringifyFn));

这里stringifyFn是传入的自定义格式化函数,输出:{"name":"xiaoming","age":13,"score":100}

第三个参数

如果我们得到一段数据但是它的可读性不是很好,我们期望它变成我们想要的可读性更棒的格式,这个时候就运用到了JSON.stringify的第三个参数了

var person = {
name: "Jim Cowart",
location: {
city: {
name: "Chattanooga",
population: 167674
},
state: {
name: "Tennessee",
abbreviation: "TN",
population: 6403000
}
},
company: "appendTo"
};
//如果你希望缩进量为2 个空格,
// 你可以这么干:
JSON.stringify(person, null, 2);
/* produces:
"{
"name": "Jim Cowart",
"location": {
"city": {
"name": "Chattanooga",
"population": 167674
},
"state": {
"name": "Tennessee",
"abbreviation": "TN",
"population": 6403000
}
},
"company": "appendTo"
}"
*/
// 如果你希望使用 tab 缩进,那么
// 你可以传入 \t 作为第三个参数
// 以此来告别空格缩进
JSON.stringify(person, null, "\t");
/*输出结果:
"{
"name": "Jim Cowart",
"location": {
"city": {
"name": "Chattanooga",
"population": 167674
},
"state": {
"name": "Tennessee",
"abbreviation": "TN",
"population": 6403000
}
},
"company": "appendTo"
}"
*/

一、JSON.parse()

JSON.parse方法用于将JSON字符串转化成对象。

JSON.parse('{}') // {}
JSON.parse('true') // true
JSON.parse('"foo"') // "foo"
JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
JSON.parse('null') // null

第二个参数:JSON.parse方法可以接受一个处理函数,用法与JSON.stringify方法类似

function f(key, value) {
if ( key === ""){
return value;
}
if ( key === "a" ) {
return value + 10;
}
} var o = JSON.parse('{"a":1,"b":2}', f);
o.a // 11
o.b // undefined

开发中常用的两个JSON方法的更多相关文章

  1. Linux嵌入式开发中常用的两个工具

    TFTP 全称:Trivial File Transfer Protocol(简单文件传输协议) 进行小文件传输 在ubuntu下设置TFTP服务器 $ sudo apt-get install tf ...

  2. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

  3. C#开发中常用的加密解密方法

    转载自:https://www.cnblogs.com/bj981/p/11203711.html C#开发中常用的加密解密方法 相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天 ...

  4. 开发中常用的Hook

    开发中常用的Hook 什么是Hook? Hook 是一些可以让你在函数组件里"钩入" React state 及生命周期等特性的函数,用来实现一些 class 组件的特性的. 1 ...

  5. iOS开发之网络编程--1、AFNetwork 3.x 的所有开发中常用基础介绍

    前言:第三方网络请求框架中AFNetwork 3.x收欢迎程度相当高的: 由于iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载 ...

  6. spring注解开发中常用注解以及简单配置

    一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...

  7. Java开发中常用jar包整理及使用

    本文整理了我自己在Java开发中常用的jar包以及常用的API记录. <!-- https://mvnrepository.com/artifact/org.apache.commons/com ...

  8. .net开发中常用的第三方组件

    .net开发中常用的第三方组件 2013-05-09 09:33:32|  分类: dotnet |举报 |字号 订阅     下载LOFTER 我的照片书  |   RSS.NET.dll RSS. ...

  9. 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .

    1.2.    Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l        第一个比较常用的就是Application级Scope,通常我们会将一 ...

随机推荐

  1. JUC自定义线程池练习

    JUC自定义线程池练习 首先上面该线程池的大致流程 自定义阻塞队列 首先定义一个双向的队列和锁一定两个等待的condition 本类用lock来控制多线程下的流程执行 take和push方法就是死等, ...

  2. 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享

    一.共享桌面原理 共享桌面在直播系统中是一个必备功能 共享者:每秒钟抓取多次屏幕,每次抓取的屏幕都与上一次抓取的屏幕做比较,取它们的差值,然后对差值进行压缩:如果是第一次抓屏或切幕的情况,即本次抓取的 ...

  3. Doker从0-1

    1.docker思想: 它是一种集装箱的思想,,在以前我们部署一个项目上线的时候,我们要部署各种各样的环境.配置.依赖等,各种各样的环境的配置是十分麻烦的,所以就有了docker.他就是将我们的项目和 ...

  4. unity---给物体施加普通力和位置力

    普通力 让物体沿着某一方向获得一个力,vector3方向 addForceObj.GetComponent<Rigidbody>().AddForce(1000,0,1000); 位置力 ...

  5. 对抗噪音,一键清晰,HMS Core音频编辑服务给你“录音棚”般的体验

    短视频时代来临,一部手机就可以玩转多种花样,所以越来越多的自由创作者加入这个行业,平时生活中用手机拍短视频.街头唱歌的非专业从业者随处可见.离开了录音棚,没有专业.统一的录音设备,无论在家里还是在路边 ...

  6. mac安装git、node

    1.需要先安装homebrew(之前的文章里有) 2.安装git brew install git 3.安装node brew install node 3.1.安装成功后,查看版本号 node -v ...

  7. autohotkey(AHK)实现箭头映射

    起因 在主力本上使用了AHK实现alt ijkl的箭头映射,在另一个本子上怎么都不习惯,于是网上找教程,找了半天... 因为大家习惯了快捷键都不一样,为了避免以后浪费时间,因此开此文记录. 操作 ht ...

  8. 第2章 C++编程入门

    C++中的数据分为常量和变量. 2.1常量(Constants) 顾名思义,常量的值在程序中不能改变 Type of constant(常量数据类型) | integer:整型 | floating- ...

  9. Java并发3

    轻量级锁:如果一个有多个线程访问,但多线程访问的时间是错开的,没有竞争,那么可以使用轻量级锁来优化: monitor:重量级锁: 正常我们使用synchronized时,没有竞争则是轻量级锁,当遇到竞 ...

  10. 000 上传本地库到Github远程库过程全记录

    20220613 Github上新创建了一个CsImage库,之后本地创建了一个对应名称的目录,并创建本地库,进行了上传操作,记录一下过程 1.Github上CsImage库创建完成 Github上创 ...