浅谈 JSON.stringify 方法
一、前言
最近项目中,遇到需要将对象转换成字符串进行传递,上次写过一篇文章关于json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值。当时主要是用在有时候处理字符串和json对象之间的转换,写的主要是怎么用,涉及到JSONstringify具体用法没有涉及到,有时候对于一个JSON.stringify自带的方法掌握一下,可能会对于一个问题有更快的解决方案。
文章同步的社区:http://www.mwcxs.top/page/426.html
二、用法实例
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 文本添加缩进、空格和换行符以使其更易于读取。
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数组,就非常轻松的处理这个
3、JSON.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];*/
// if(value == 0 ){
// value = '女';
// }else{
// 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不转)
浅谈 JSON.stringify 方法的更多相关文章
- 浅谈JSON.stringify 函数与toJosn函数和Json.parse函数
JSON.stringify 函数 (JavaScript) 语法:JSON.stringify(value [, replacer] [, space]) 将 JavaScript 值转换为 Jav ...
- JSON.stringify 方法
浅谈 JSON.stringify 方法 用过 json 的应该都知道,把一个对象通过 stringify 之后提交给后台或者存储在 Storage 里是很常用的手段.但是 IE6-8 下没有 J ...
- IE8中JSON.stringify方法对自动转换unicode字符的解决方案
IE8内置了JSON对象,用以处理JSON数据.与标准方法的不同,IE8的JSON.stringify会把utf-8字符转码: var str = "我是程序员" var json ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- Unity iOS打开AppStore评星页面,浅谈Application.OpenURL()方法。
http://fairwoodgame.com/blog/?p=38 Unity iOS打开AppStore评星页面,浅谈Application.OpenURL()方法. Posted in Uni ...
- javascirpt的json.stringify()方法在IE浏览器兼容性模式下出错的原因与解决办法
今天开机混底薪的时候遇到一个JSON.stringify()在IE浏览器兼容模式下的问题. 问题描述 一个弹窗选择的功能原来好好的,突然就不行了. 想要调试调试不了,报错信息也看不到(一开F12这破I ...
- JS中JSON.stringify()方法,将js对象(json串)转换成字符串,传入服务器
JSON 通常用于与服务端交换数据. 在向服务器发送数据时一般是字符串. 我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串. 语法 JSON.string ...
- 浅谈JSON.parse()、JSON.stringify()和eval()的作用
(1)JSON.parse 函数 var json = '{"name":"GDT","age":23,"University&q ...
- JSON.parse()和JSON.stringify()方法
parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":&qu ...
随机推荐
- 利用ffmpeg做视频解码的顺序
这几天在实验室捣鼓着用ffmpeg做视频解码,终于把数据解出来了,虽然还没有做显示部分,不知道解码解得对不对,但料想是不会有什么问题了.回头看看这几天的工作,其间也遇到了不少问题,主要还是对ffmpe ...
- SQL语句查询时防止SQL语句注入的方法之一
1.传参时有可能出现SQL语句注入 StringBuffer sb = new StringBuffer(); if(StringUtils.isNotBlank(areaCode)) { sb.ap ...
- HighCharts之2D回归直线的散点
HighCharts之2D回归直线的散点 1.实例源码 ScatterLine.html: <!DOCTYPE html> <html> <head> <me ...
- Windows控制台下绘制简单图形
最近接触到一个很有意思的问题,如何在Windows控制台下画图,翻遍了C的头文件也没找到画图的函数,好吧,那就用Windows提供的API函数吧,看来想移植是没戏了.先画一个简单的图,类似心电图那种吧 ...
- org.hibernate.MappingException:Unknown entity:java.util.ArrayList
1.错误描述 [CQ] ERROR [http-apr-8888-exec-3] com.opensymphony.xwork2.util.logging.commons.CommonsLogger. ...
- 使用dos的tree命令输出文件夹树
用dos的tree命令就可以实现文件夹树状图的输出,不过目前仅能输出为.txt文件 方法如下: 开始->运行 输入cmd打开命令控制台 切换到你要显示的列表文件夹 比如 输入 d: 切换到d盘 ...
- RobotFramework自动化测试框架-移动手机自动化测试Open Application关键字的使用
在AppiumLibrary库中,Open Application关键字用来打开一个待测试移动APP. 示例1:连接本机已经打开的appium服务端,打开一个待测试的安卓APP,指定测试平台为Andr ...
- TensorLayer官方中文文档1.7.4:API – 数据预处理
所属分类:TensorLayer API - 数据预处理¶ 我们提供大量的数据增强及处理方法,使用 Numpy, Scipy, Threading 和 Queue. 不过,我们建议你直接使用 Tens ...
- 【NOI2004】郁闷的出纳员(splay)
题面 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工 作,但是令人郁闷的是,我们的老板反复无 ...
- 【learning】凸包
吐槽 计算几何这种东西qwq一开始真的觉得恶心qwq(主要是总觉得为啥画图那么直观的东西非要写一大堆式子来求qwq真的难受qwq) 但其实静下心来学习的话感觉还是很妙的ovo题目思考起来也十分好玩ov ...