博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSON.parse()与JSON.stringify()高级用法
阅读量:4972 次
发布时间:2019-06-12

本文共 2944 字,大约阅读时间需要 9 分钟。

    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.cnblogs.com/yezi-dream/p/10263043.html

你可能感兴趣的文章
linux 环境变量
查看>>
JQuery UI datepicker 使用方法
查看>>
转:网页启用Gzip压缩 提高浏览速度
查看>>
poj 3321(树状数组)
查看>>
《Java程序设计》第六周学习总结
查看>>
Linux正则表达式
查看>>
Mysql tinyint长度为1时在java中被转化成boolean型
查看>>
【刷题】BZOJ 3930 [CQOI2015]选数
查看>>
SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
查看>>
nagios 自定义插件demo
查看>>
Azure 基础 : 使用 Automation 定时开机
查看>>
使用Vim normal 命令 修改可视块区域
查看>>
详细分享UICollectionView的自定义布局(瀑布流, 线性, 圆形...)
查看>>
visio的一些有用的方法
查看>>
js跨域问题
查看>>
Excel VBA
查看>>
java IO流
查看>>
Java反射之Bean修改更新属性值等工具类
查看>>
《图解CSS3——第2章 CSS3选择器-3》
查看>>
Exchange Server备份与恢复
查看>>