JSON.parse()与JSON.stringify()高级用法

时间:2022-06-05 23:26:50

JSON.parse()与JSON.stringify是将JSON对象与字符串互相转换的方法,它们还有一些参数可以让我们在实际应用中更加方便,现在介绍一下它们的高级用法

JSON.parse()

JSON.parse(jsonString, (key, value) => {}) 可以接受两个参数,第一个就是我们已经熟悉的json字符串,第二个是一个回调函数,我们可以对返回的每一个value做处理,然后返回对应的value

const testJSON = {
name: 'test',
value: 7,
}; const jsonStr = JSON.stringify(testJSON); JSON.parse(jsonStr, (key, value) => {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}); // {
name: 'TEST',
value: 7,
}

JSON.stringify()

JSON.stringify(jsonObject, replace, space) 可以接受三个参数,第一个是json对象,第二个在转成字符串前处理属性值,第三个在字符串中插入空白符增强可读性

replace: 传入的参数可以是一个数组,也可以是一个回调函数,作用都是用于处理属性值;当是一个数组时,只有在数组中存在的属性,才会出现在最终转成的字符串中;当是一个回调函数时,可以处理每一个属性值,然后返回经过处理的值,若返回值是undefined ,则该属性值会被忽略,将不会出现在最终的字符串中。

(注意: 当relace为数组,过滤属性时,嵌套属性同样会被过滤掉)

const testJSON = {
name: 'test',
cities: {
shanghai: 1,
},
}; JSON.stringify(testJSON, ['name']); // "{"name": 'test'}" JSON.stringify(testJSON, ['name', 'cities']); // "{"name": 'test', "cities": {}}" JSON.stringify(testJSON, ['name', 'cities', 'shanghai']); // "{"name": 'test', "cities": {"shanghai": 1}}" JSON.stringify(testJSON, (key, value) => {
if (key === 'cities') {
return 'cities';
}
return value;
}); // "{"name": 'test', "cities": 'cities'}" JSON.stringify(testJSON, (key, value) => {
if (key === 'shanghai') {
return 9;
}
return value;
}); // "{"name": 'test', "cities": {"shanghai": 9}}"

space: 传入的参数可以是String或Number的值,如果是String值,则该字符串会作为空白符,字符串最长可为10个字符,如果超过了10个字符,那么会截取前10个字符,若是undefined或null,则会被忽略,不会显示空白符;如果是Number的值,表示会有多少个空格作为空白符,最大数值为10,超过10也会被当做10来处理,最小为1,小于1则无效,不会显示空格

const testJSON = {
name: 'test',
city: 'shanghai',
}; JSON.stringify(testJSON, undefined, ' '); // "{
"name": 'test',
"city": 'shanghai',
}" JSON.stringify(testJSON, undefined, ' '); // "{
"name": 'test',
"city": 'shanghai',
}" JSON.stringify(testJSON, undefined, '\t'); // "{
"name": 'test',
"city": 'shanghai',
}" JSON.stringify(testJSON, undefined, '...'); // "{
..."name": 'test',
..."city": 'shanghai',
}" JSON.stringify(testJSON, undefined, 7); // "{
"name": 'test',
"city": 'shanghai', // 缩进7个空格
}"

toJSON方法

如果一个被序列化的json对象拥有toJSON方法,那么真正被序列化的值是toJSON方法返回的值,而不是本身的对象

const testJSON = {
name: 'test',
toJSON: () => {
return { toJson: 'testJson' },
},
}; JSON.stringify(testJSON); // "{"toJson": 'testJson'}"

JSON.stringify()序列化复杂的json对象

有的json对象中包含函数,那么序列化是会忽略掉函数,当我们想保留函数时,可以通过replace(回调函数)来处理

const testJSON = {
name: 'test',
getName: () => {
return 'test';
},
}; JSON.stringify(kTextJson, (key, value) => {
if (typeof value === 'function') {
return Function.prototype.toString.call(value);
}
return value;
}, '\t')); // {
"name": "test",
"getName": "function getName() {\n return 'test';\n }"
}

参考文章:https://www.css88.com/archives/8735

JSON.parse()与JSON.stringify()高级用法的更多相关文章

  1. arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式

    arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...

  2. JSON对象和字符串之间的相互转换 – JSON.parse() 和 JSON.stringify()

    所有现代浏览器都支持 JSON 对象,有两个非常有用的方法来处理 JSON 格式的内容: JSON.parse(string) :接受一个 JSON 字符串并将其转换成一个 JavaScript 对象 ...

  3. JSON对象获取指定元素以及JSON.parse() 与 JSON.stringify() 的区别

    利用 JSON.parse(param) 实现 例: var param = { "name" : "张三", "text" : { &qu ...

  4. JSON.parse() 和 JSON.stringify()

    JSON.parse()和JSON.stringify()   1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf& ...

  5. 有关javascript中的JSON.parse和JSON.stringify的使用一二

    有没有想过,当我们的大后台只是扮演一个数据库的角色,json在前后台的数据交换中扮演极其重要的角色时,作为依托node的前端开发,其实相当多的时间都是在处理数据,准确地说就是在处理逻辑和数据(这周实习 ...

  6. JSON.parse和JSON.stringify 参数详解

    JSON.parse和JSON.stringify这两个浏览器自带(IE6/7除外)的方法平常我们经常用到,但是一般都只是用到了他们的第一个参数,比如字符串转对象:JSON.parse('{}')   ...

  7. Jquery里面种的 JSON.parse() 与JSON.stringify() 的区别

    JSON.parse()与JSON.stringify()的区别   JSON.parse()[从一个字符串中解析出json对象] Demo: //定义一个字符串 var data='{"N ...

  8. JSON.parse与JSON.stringify

    JSON:JavaScript Object Notation(JavaScript对象表示法):甚至我们就可以大致认为JSON就是Javascript的对象,只不过范围小上一些. JSON的MIME ...

  9. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

随机推荐

  1. Laravel大型项目系列教程(二)之用户管理

    Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能. 二.Let's go 1.创建用户注册视图 $ php artisan generate:v ...

  2. 所有HTTP请求参数及报文查看SERVLET

    HttpRequestServlet.java 说明: 用于接受所有http形式的请求,并把接受到的request中param及getInputStream全打印出来. package king.se ...

  3. SQLServer查询锁表

    查看被锁表: select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys. ...

  4. 高并发WCF配置

    在使用WCF做服务接口时,TCP模式肯定比Http效率高,Binary/MTOM格式的绑定也会Text格式的绑定高效. 两个endpoint,一个用来调试:ms-mex的binding是用来方便WCF ...

  5. Ubuntu16.04+hadoop2.7.3环境搭建

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6106891.html 最近开始学习大数据相关的知识,最著名的就是开源的hadoop平台了.这里记录一下目前最新版 ...

  6. Java反射 - 2(对象复制,父类域,内省)

    为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...

  7. codeforces794D dfs+图上hash

    http://codeforces.com/problemset/problem/794/D 题意:在一个国家有 n 座城市和一些双向边.这些城市被编号为 1 到 n. 一共有 m 条双线边,第 i条 ...

  8. Microsoft Orleans构建高并发、分布式的大型应用程序框架

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  9. C++中清空缓冲区

    C++中标准输入cin有多种输入方式.. 这篇文章罗列的还是简要易懂的.C++输入cin详解...如果只是简单的使用cin>>的话,会单个token的读入.但是会忽略换行符,空格,制表符等 ...

  10. 【大数据系列】win10上安装hadoop开发环境

    为了方便采用了Cygwin模拟linux环境的方法 一.安装JDK以及下载hadoop hadoop官网下载hadoop http://hadoop.apache.org/releases.html  ...