参考文章: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. uniapp中利用uni.$emit()和uni.$on()进行页面和tabbar页面传值(页面通讯)

    tabbar页面 <script> export default { data() { return { list: [] , }; }, onLoad() { // 监听事件 uni.$ ...

  2. Asp.Net Core 7 preview 4 重磅新特性--限流中间件

    前言 限流是应对流量暴增或某些用户恶意攻击等场景的重要手段之一,然而微软官方从未支持这一重要特性,AspNetCoreRateLimit这一第三方库限流库一般作为首选使用,然而其配置参数过于繁多,对使 ...

  3. 从 rails 窥探 web 全栈开发(零)

    从 rails 窥探 web 全栈开发(零) 本文将讲述在学习之前几个必须要知道的概念,这些词汇在 rails 中都会出现. 本文前置条件:安装好 Ruby. 从 rails 窥探 web 全栈开发( ...

  4. flask配置文件、路由设置、模板语法、请求与响应、session使用、闪现功能(flash)

    今日内容概要 flask 配置文件 flask 路由系统 flask模板语法 请求与相应 session 闪现(flash翻译过来的) 内容详细 1.flask 配置文件 # django ---&g ...

  5. 五、redis哨兵两套环境同一局域网容灾切换问题

    上周遇到个灵异事件,实验室有两套环境来搭建redis集群和哨兵,分别是: 第一套环境IP:67(master) 65(salve) 66(salve)第二套环境IP:115(master) 116(s ...

  6. Redis设计与实现3.1:主从复制

    主从复制 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 SLAVEOF 新旧复制功能 旧版复制功能 旧版复制功能的实现为 同步 和 命令传播: 当刚连上Mas ...

  7. 好客租房44-react组件基础综合案例-5发表评论-1

    发表评论 1给按钮绑定点击事件 2在事件处理程序中 通过state获取评论信息 3将评论信息添加到state中 并调用setState()方法更新数据 //导入react import React f ...

  8. 浅析 2D 组态与 2.5D 组态的区别 | 空调装配生产线与化工安全流程

    前言 为了更有效辨别 2D 与 2.5D 之间的区别,图扑软件选用 2D 空调装配生产线与 2.5D 化工厂安全流程作比较.通过自主研发的 HT 产品,采用 B/S 架构快速搭建零代码拖拽式 Web ...

  9. Java - ConcurrentHashMap的原理

    Java - ConcurrentHashMap的原理 **这是JDK1.7的实现** ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment. HashE ...

  10. CabloyJS一站式助力微信、企业微信、钉钉开发 - 钉钉篇

    前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...