原文:https://www.cnblogs.com/chengxs/p/8656723.html

一、前言

最近项目中,遇到需要将对象转换成字符串进行传递,上次写过一篇文章关于json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值。当时主要是用在有时候处理字符串和json对象之间的转换,写的主要是怎么用,涉及到JSONstringify具体用法没有涉及到,有时候对于一个JSON.stringify自带的方法掌握一下,可能会对于一个问题有更快的解决方案。

二、用法实例

1、方法的定义

2、JSON.stringify提供了参数分离出自己需要的那部分数据

3、JSON.stringify提供了参数回调函数做一个映射关系

4、JSON.stringify提供了参数格式化字符串

用过JSON都知道,把一个对象通过stringify之后变成字符串,再提交给后台或者存储在storage是很常用的手段(storage是存的key,value;value只能存字符串,而不能是json对象)。

var data =[
{name: "程咬金",sex:"1",age:26
},
{name: "程才",sex:"0",age:20
},
{name: "程新松",sex:"1",age:22
},
{name: "程功",sex:"1",age:18
}
];
console.log(data,'数组');
var str_json = JSON.stringify(data);
console.log(str_json,'字符串');

这个是日常的用法,非常简单。

1、方法的定义

JSON.stringify ( value [, replacer] [ , space] )

参数:

(1)value:必选,要转换的值(包括所有的数据类型,通常是对象或者数组)

(2)replace:可选,用于要转换结果的函数或者数组;如果replace是数组,仅仅是转换具有该键值的成员,成员的转换顺序和键在数组中的顺序一致;如果replace是函数,会传入每一个成员的键和值,使用的是返回值而不是原始值,如果函数返回的是undefined,则排除该成员。查看了JSON2的源码,

  rx_escapable.lastIndex = 0;return rx_escapable.test(string)? "\"" + string.replace(rx_escapable, function (a) {var c = meta[a];return typeof c === "string"? c: "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);}) + "\"": "\"" + string + "\"";}

确认并不会传入每个成员的键和值,而仅仅以空字符串形式调用replacer函数。该函数的实质是自定义的用于转化为JSON字符串的函数。

(3)space:可选, 向返回值JSON 文本添加缩进、空格和换行符以使其更易于读取。

如果省略space,则将生成返回值文本,而没有任何额外空格。
如果 space是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。
如果 space是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。
如果 space 是长度大于 10个字符的字符串,则使用前 10 个字符。

2、JSON.stringify提供了分离出自己需要的那部分数据

比如说这个场景,我们的数据非常的复杂,有类似头像,昵称,个人签名等,可是我保存在本地,只需要用户名,性别,怎么搞?

方法一:可以用遍历数组重新提取一下

var data =[
{name: "程咬金",sex:"1",age:26
},
{name: "程才",sex:"0",age:20
},
{name: "程新松",sex:"1",age:22
},
{name: "程功",sex:"1",age:18
}
];
/*日常用法*/
//console.log(data,'数组');
//var str_json = JSON.stringify(data);
//console.log(str_json,'字符串');/*提取用户名和性别*/
for(var i=0,new_data=[];i<data.length;i++){new_data.push({name: data[i].name,sex: data[i].sex});
}
var str_json = JSON.stringify(new_data);
console.log(str_json);

方法二:的确可以这么干,但是JSON.stringify提供了参数分离出自己需要的那部分数据

var data =[
{name: "程咬金",sex:"1",age:26
},
{name: "程才",sex:"0",age:20
},
{name: "程新松",sex:"1",age:22
},
{name: "程功",sex:"1",age:18
}
];
/*日常用法*/
//console.log(data,'数组');
//var str_json = JSON.stringify(data);
//console.log(str_json,'字符串');/*提取用户名和性别-方法1*/
//for(var i=0,new_data=[];i<data.length;i++){
//    new_data.push({
//        name: data[i].name,
//        sex: data[i].sex
//    });
//}
//var str_json = JSON.stringify(new_data);
//console.log(str_json);
/*提取用户名和性别-方法2*/
var str_json = JSON.stringify(data,["name","sex"]);
console.log(str_json);

第二个参数只要传入需要的keys数组,就非常轻松的处理这个

3JSON.stringify提供了回调函数做一个映射关系

比如说,我们把sex里的1,0修改为男,女 ,那么第二个参数可以通过回调函数来处理这个映射关系。

var data =[
{name: "程咬金",sex:"1",age:26
},
{name: "程才",sex:"0",age:20
},
{name: "程新松",sex:"1",age:22
},
{name: "程功",sex:"1",age:18
}
];
/*日常用法*/
//console.log(data,'数组');
//var str_json = JSON.stringify(data);
//console.log(str_json,'字符串');/*提取用户名和性别-方法1*/
//for(var i=0,new_data=[];i<data.length;i++){
//    new_data.push({
//        name: data[i].name,
//        sex: data[i].sex
//    });
//}
//var str_json = JSON.stringify(new_data);
//console.log(str_json);
/*提取用户名和性别-方法2*/
//var str_json = JSON.stringify(data,["name","sex"]);
//console.log(str_json);/*回调函数做一个映射关系*/
var str_json = JSON.stringify(data,function(key,value){if(key == 'sex'){return ["女",'男'][value];}return value;
});
console.log(str_json);

第二个参数很厉害,省去了不少的麻烦

4、JSON.stringify提供了参数格式化字符串

第三个参数,用于格式化字符串

var data =[
{name: "程咬金",sex:"1",age:26
},
{name: "程才",sex:"0",age:20
},
{name: "程新松",sex:"1",age:22
},
{name: "程功",sex:"1",age:18
}
];
/*日常用法*/
//console.log(data,'数组');
//var str_json = JSON.stringify(data);
//console.log(str_json,'字符串');/*提取用户名和性别-方法1*/
//for(var i=0,new_data=[];i<data.length;i++){
//    new_data.push({
//        name: data[i].name,
//        sex: data[i].sex
//    });
//}
//var str_json = JSON.stringify(new_data);
//console.log(str_json);
/*提取用户名和性别-方法2*/
//var str_json = JSON.stringify(data,["name","sex"]);
//console.log(str_json);/*回调函数做一个映射关系*/
//var str_json = JSON.stringify(data,function(key,value){
//    if(key == 'sex'){
//        return ["女",'男'][value];
//    }
//    return value;
//});
//console.log(str_json);/*格式化字符串*/
var str_json = JSON.stringify(data,null,'\t');
console.log(str_json);
var str_json = JSON.stringify(data,['name','sex'],'\t');
console.log(str_json);

一般情况下用不上,除了可以用于导出这些数据,保存本地查看方便。

最后附上js的代码,使用node就可以运行这个js

var data =[
{name: "程咬金",sex:"1",age:26
},
{name: "程才",sex:"0",age:20
},
{name: "程新松",sex:"1",age:22
},
{name: "程功",sex:"1",age:18
}
];
/*日常用法*/
//console.log(data,'数组');
//var str_json = JSON.stringify(data);
//console.log(str_json,'字符串');/*提取用户名和性别-方法1*/
//for(var i=0,new_data=[];i<data.length;i++){
//    new_data.push({
//        name: data[i].name,
//        sex: data[i].sex
//    });
//}
//var str_json = JSON.stringify(new_data);
//console.log(str_json);
/*提取用户名和性别-方法2*/
//var str_json = JSON.stringify(data,["name","sex"]);
//console.log(str_json);/*回调函数做一个映射关系*/
//var str_json = JSON.stringify(data,function(key,value){
//    if(key == 'sex'){
//        return ["女",'男'][value];
//    }
//    return value;
//});
//console.log(str_json);/*格式化字符串*/
var str_json = JSON.stringify(data,null,'\t');
console.log(str_json);
var str_json = JSON.stringify(data,['name','sex'],'\t');
console.log(str_json);

注意:

1、JSON.stringify会自动把所要转换内容中的汉字转换为Unicode编码
2、浏览器间有差别,个别浏览器会把将要提交表单内容中的Unicode编码自动转为汉字(Chrome自动转换,IE不转)

文中有错误的地方希望指出,共同进步

js json stringify相关推荐

  1. (转)JS之——解决IE6、7、8使用JSON.stringify报JSON未定义错误的问题

    https://blog.csdn.net/l1028386804/article/details/53439755 在通过JavaScript将对象类型的参数通过JSON.stringify转换成字 ...

  2. 原生js实现JSON.parse()和JSON.stringify()

    - 首先JSON.stringify()是将js对象转换为JSON形式 实现思路: 通过递归调用,来实现对转换对象Object的深层value进行遍历,利用array的join实现最终字符串拼接 fu ...

  3. js深度复制一个对象使用JSON.stringify是最好的办法吗

    转载自   js深度复制一个对象使用JSON.stringify是最好的办法吗 深度复制一个对象,看到很多种方法,最简单的是: var newObject = JSON.parse(JSON.stri ...

  4. [js] 如何提升JSON.stringify的性能

    [js] 如何提升JSON.stringify的性能 用第二个参数指定需要转换的属性,按需转换 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 ...

  5. JSON Stringify示例–如何使用JS解析JSON对象

    There are so many programming languages, and every language has its own features. But all of them ha ...

  6. js字符串转换为json对象JSON.parse()及将json对象转为json字符串JSON.stringify()

    一.JSON对象中有两个非常好用的方法: 1 JSON.stringify接收一个JS对象转化为json字符串 2 JSON.parse接受json字符串转化为JS对象 const my={ name ...

  7. JS之——解决IE6、7、8使用JSON.stringify报JSON未定义错误的问题

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/53439755 在通过JavaScript将对象类型的参数通过JSON.string ...

  8. JS将unicode码转中文方法(解决IE8对JSON.stringify中文转换成unicode的问题)

    第①种情况:(无特殊字符) // 把json对象转为json串 var stringcontent = JSON.stringify(data.jsonObject); //此时变量为:stringc ...

  9. js JSON.parse和JSON.stringify

    JSON.parse 将json字符串转换成对象 JSON.parse(text[, reviver]) reviver可选参数 var students = '{"id": 1, ...

  10. JS实现JSON.stringify

    JSON.stringify是浏览器高版本带的一个将JS的Objtect对象转换为JSON字符串的一个方法,不过再IE6下面,并不存在JSON这一对象,因此,用到此方法时,需要写一套兼容性的代码. J ...

最新文章

  1. Arch安装zsh以及通过 Oh-My-ZSH! 开源项目的配置
  2. DSP Builder
  3. 【新手教程】CE找武林外传基址方法
  4. php microtime true输出说明,php使用microtime(true)查看代码执行时间
  5. 02 Nginx和Keepalived高可用
  6. 京东程序员回应“被猝死”;淘宝特价版已提交微信小程序;苹果 M1 单核性能勇超 Intel 11 代 i7...
  7. MUI框架常用代码段
  8. HTML+CSS实现小米官网首页
  9. 高纬度思考法读书笔记
  10. URL.createObjectURL()方法
  11. 3dmax顶点动画导入unity_用3dMax给lol人物模型制作表情动画并导入Unity
  12. 【ArcGIS微课1000例】0039:ArcGIS注记转CAD注记的方法
  13. 降噪效果好的蓝牙耳机该怎么选?盘点四款高品质降噪蓝牙耳机
  14. 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习
  15. Java 集合 --- String, StringBuilder, StringBuffer
  16. Pandas数据可视化原来也这么厉害!
  17. 日入500+的程序员都在用的“接私活”平台
  18. HDFS心跳机制--判断DN失联部分的源码解析
  19. 计算机神书『编码:隐匿在计算机软硬件背后的语言』
  20. 球阀的毕业设计【设计说明书+cad图纸+CAXA制造工程师设计+SOLID EDGE三维造型】

热门文章

  1. Matlab获取线粒体序列及核苷酸初步分析
  2. python函数自己调用自己_python怎么调用自己的函数
  3. 《淘宝数据魔方技术架构解析》阅读笔记
  4. OpenStack与Tungsten Fabric如何集成丨TF成立大会演讲实录
  5. 2016年总结与2017展望
  6. 《Domain-shift Conditioning using Adaptable Filtering …… for Robust Chinese Spell Check》阅读记录
  7. cisco思科交换机的基本使用
  8. 嵌入式linux系统蜂鸣器实验,嵌入式系统原理实验四蜂鸣器.docx
  9. JUC并发包基于AQS实现的线程同步器的案例分析
  10. WPS---EXCEL(八)---互换两列数据