浅谈 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 ...
随机推荐
- R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)
本文转载自经管之家论坛, R语言中的Softmax Regression建模 (MNIST 手写体识别和文档多分类应用) R中的softmaxreg包,发自2016-09-09,链接:https:// ...
- VC下ffmpeg例程调试报错处理
tools/options/directories/include files 添加ffmpeg头文件所在路径 tools/options/directories/library files 添加 ...
- 2.3 InnoDB 体系架构
下图简单显示了InnoDB的存储引擎的体系架构,从图可见,InnoDB储存引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构 缓存磁 ...
- CodeForces 940E
题意略. 这个题目我开始题意理解得有点问题.本题的实质是在这个数列中选择一些数字,使得选出的这些数字之和最大,用dp来解. 我们先要明确:当我选择数列长度为2 * c时,不如把这个长度为2 * c的劈 ...
- Python基础_文件的的处理及异常处理
今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数 open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...
- thinkphp在mac下报错
简要:众所周知,开发软件最好的环境是在MAC下;为此在黑苹果上,用Thinkphp开发;在过程中出现,找不到model以及数据库类型错误;为此向大家分享解决办法,希望能够帮助困惑的伙伴们,如果有不对或 ...
- 分享一下我进入IT行业的经历
今天突然根想写博客,就注册了一个,分享一下我的成长经历. 我第一次接触编程的时候是在上大学的时候,我学的专业是工程测量接触的第一个语言是vb,我记得很清楚,我当时写出第一个小Demo是的心情,感觉到了 ...
- 牛刀小试——记一次帮朋友小幅优化SQL
和一个小朋友聊天,小朋友愁眉苦脸,不爱说话,我问怎么了,他说:经理交代的一个任务完成不了.我问:什么任务?他说:程序里的一个功能对应的SQL,太慢了.我问:现在性能是什么样?他说:一分钟.我问:达到什 ...
- Redis之PHP操作
一.Redis连接与认证 //连接参数:ip.端口.连接超时时间,连接成功返回true,否则返回false $ret = $redis->connect('127.0.0.1', 6379, 3 ...
- MongoDB存储引擎(中)——WiredTiger
上一篇博文介绍了MongoDB的MMAPv1存储引擎,本文接着介绍MongoDB另一个存储引擎--WiredTiger,WiredTiger是在MongoDB3.0版本引入的,并且在MongoDB3. ...