javascript
java json.stringify_浅谈 JSON.stringify 方法
一、前言
最近項(xiàng)目中,遇到需要將對(duì)象轉(zhuǎn)換成字符串進(jìn)行傳遞,上次寫過一篇文章關(guān)于json字符串轉(zhuǎn)換成json對(duì)象,json對(duì)象轉(zhuǎn)換成字符串,值轉(zhuǎn)換成字符串,字符串轉(zhuǎn)成值。當(dāng)時(shí)主要是用在有時(shí)候處理字符串和json對(duì)象之間的轉(zhuǎn)換,寫的主要是怎么用,涉及到JSONstringify具體用法沒有涉及到,有時(shí)候?qū)τ谝粋€(gè)JSON.stringify自帶的方法掌握一下,可能會(huì)對(duì)于一個(gè)問題有更快的解決方案。
二、用法實(shí)例
1、方法的定義
2、JSON.stringify提供了參數(shù)分離出自己需要的那部分?jǐn)?shù)據(jù)
3、JSON.stringify提供了參數(shù)回調(diào)函數(shù)做一個(gè)映射關(guān)系
4、JSON.stringify提供了參數(shù)格式化字符串
用過JSON都知道,把一個(gè)對(duì)象通過stringify之后變成字符串,再提交給后臺(tái)或者存儲(chǔ)在storage是很常用的手段(storage是存的key,value;value只能存字符串,而不能是json對(duì)象)。
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,'數(shù)組');var str_json =JSON.stringify(data);
console.log(str_json,'字符串');
這個(gè)是日常的用法,非常簡(jiǎn)單。
1、方法的定義
JSON.stringify ( value [, replacer] [ , space] )
參數(shù):
(1)value:必選,要轉(zhuǎn)換的值(包括所有的數(shù)據(jù)類型,通常是對(duì)象或者數(shù)組)
(2)replace:可選,用于要轉(zhuǎn)換結(jié)果的函數(shù)或者數(shù)組;如果replace是數(shù)組,僅僅是轉(zhuǎn)換具有該鍵值的成員,成員的轉(zhuǎn)換順序和鍵在數(shù)組中的順序一致;如果replace是函數(shù),會(huì)傳入每一個(gè)成員的鍵和值,使用的是返回值而不是原始值,如果函數(shù)返回的是undefined,則排除該成員。查看了JSON2的源碼,
rx_escapable.lastIndex = 0;returnrx_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 + "\"";
}
確認(rèn)并不會(huì)傳入每個(gè)成員的鍵和值,而僅僅以空字符串形式調(diào)用replacer函數(shù)。該函數(shù)的實(shí)質(zhì)是自定義的用于轉(zhuǎn)化為JSON字符串的函數(shù)。
(3)space:可選, 向返回值JSON 文本添加縮進(jìn)、空格和換行符以使其更易于讀取。
如果省略space,則將生成返回值文本,而沒有任何額外空格。
如果 space是一個(gè)數(shù)字,則返回值文本在每個(gè)級(jí)別縮進(jìn)指定數(shù)目的空格。 如果 space 大于 10,則文本縮進(jìn) 10 個(gè)空格。
如果 space是一個(gè)非空字符串(例如“\t”),則返回值文本在每個(gè)級(jí)別中縮進(jìn)字符串中的字符。
如果 space 是長(zhǎng)度大于 10個(gè)字符的字符串,則使用前 10 個(gè)字符。
2、JSON.stringify提供了分離出自己需要的那部分?jǐn)?shù)據(jù)
比如說這個(gè)場(chǎng)景,我們的數(shù)據(jù)非常的復(fù)雜,有類似頭像,昵稱,個(gè)人簽名等,可是我保存在本地,只需要用戶名,性別,怎么搞?
方法一:可以用遍歷數(shù)組重新提取一下
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,'數(shù)組');//var str_json = JSON.stringify(data);//console.log(str_json,'字符串');
/*提取用戶名和性別*/
for(var i=0,new_data=[];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提供了參數(shù)分離出自己需要的那部分?jǐn)?shù)據(jù)
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,'數(shù)組');//var str_json = JSON.stringify(data);//console.log(str_json,'字符串');
/*提取用戶名和性別-方法1*/
//for(var i=0,new_data=[];i
var str_json = JSON.stringify(data,["name","sex"]);
console.log(str_json);
第二個(gè)參數(shù)只要傳入需要的keys數(shù)組,就非常輕松的處理這個(gè)
3、JSON.stringify提供了回調(diào)函數(shù)做一個(gè)映射關(guān)系
比如說,我們把sex里的1,0修改為男,女 ,那么第二個(gè)參數(shù)可以通過回調(diào)函數(shù)來處理這個(gè)映射關(guān)系。
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,'數(shù)組');//var str_json = JSON.stringify(data);//console.log(str_json,'字符串');
/*提取用戶名和性別-方法1*/
//for(var i=0,new_data=[];i
//var str_json = JSON.stringify(data,["name","sex"]);//console.log(str_json);
/*回調(diào)函數(shù)做一個(gè)映射關(guān)系*/
var str_json = JSON.stringify(data,function(key,value){if(key == 'sex'){return ["女",'男'][value];
}returnvalue;
});
console.log(str_json);
第二個(gè)參數(shù)很厲害,省去了不少的麻煩
4、JSON.stringify提供了參數(shù)格式化字符串
第三個(gè)參數(shù),用于格式化字符串
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,'數(shù)組');//var str_json = JSON.stringify(data);//console.log(str_json,'字符串');
/*提取用戶名和性別-方法1*/
//for(var i=0,new_data=[];i
//var str_json = JSON.stringify(data,["name","sex"]);//console.log(str_json);
/*回調(diào)函數(shù)做一個(gè)映射關(guān)系*/
//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);
一般情況下用不上,除了可以用于導(dǎo)出這些數(shù)據(jù),保存本地查看方便。
最后附上js的代碼,使用node就可以運(yùn)行這個(gè)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,'數(shù)組');//var str_json = JSON.stringify(data);//console.log(str_json,'字符串');
/*提取用戶名和性別-方法1*/
//for(var i=0,new_data=[];i
//var str_json = JSON.stringify(data,["name","sex"]);//console.log(str_json);
/*回調(diào)函數(shù)做一個(gè)映射關(guān)系*/
var str_json = JSON.stringify(data,function(key,value){if(key == 'sex'){return ['女','男'][value];/*該處注釋等價(jià)于return ['女','男'][value];*/
//if(value == 0 ){//value = '女';//}else{//value = '男';//}
}returnvalue;
});
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會(huì)自動(dòng)把所要轉(zhuǎn)換內(nèi)容中的漢字轉(zhuǎn)換為Unicode編碼
2、瀏覽器間有差別,個(gè)別瀏覽器會(huì)把將要提交表單內(nèi)容中的Unicode編碼自動(dòng)轉(zhuǎn)為漢字(Chrome自動(dòng)轉(zhuǎn)換,IE不轉(zhuǎn))
總結(jié)
以上是生活随笔為你收集整理的java json.stringify_浅谈 JSON.stringify 方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue路由传参的三种基本方式
- 下一篇: JavaScript this 关键字