JSON字符串--對象之間的相關轉換

一、 JSON.parse 方法

將json串轉換成object對象,然後能夠用.獲取屬性值。

var b='{"title":"編號管理","parentName":"裝備管理"}';var c=JSON.parse(b);console.log(c);

結果如下圖

你的字符串必須符合JSON格式,即鍵值都必須使用雙引號包裹,單引號不行,例如:

二、 JSON.stringify 方法

基本用法:一個對象通過stringify之後變成字符串

var data =[
{
    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、方法的定義
  • 2、JSON.stringify提供了參數分離出自己需要的那部分數據
  • 3、JSON.stringify提供了參數回調函數做一個映射關係
  • 4、JSON.stringify提供了參數格式化字符串

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:"0",age:20
},
{
    name: "程新松",sex:"1",age:22    
},
{
    name: "程功",sex:"1",age:18    
}
];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);
VM764:18 [{"name":"程才","sex":"0"},{"name":"程新松","sex":"1"},{"name":"程功","sex":"1"}]

 

方法二:的確可以這麼幹,但是JSON.stringify提供了參數分離出自己需要的那部分數據

var str_json = JSON.stringify(data,["name","sex"]);
console.log(str_json);
 

第二個參數只要傳入需要的keys數組,就非常輕鬆的處理這個,結果如下:

 

 3JSON.stringify提供了回調函數做一個映射關係

比如說,我們把sex裏的1,0修改爲男,女 ,那麼第二個參數可以通過回調函數來處理這個映射關係。

var str_json = JSON.stringify(data,function(key,value){
    if(key == 'sex'){
        return ["女",'男'][value];
    }
    return value;
});
console.log(str_json);

 

 

第二個參數很厲害,省去了不少的麻煩,結果如圖:

 

4、JSON.stringify提供了參數格式化字符串

第三個參數,用於格式化字符串 

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);

5、JSON.stringify的妙用-判斷數組中是否包含某對象,或判斷對象是否相等

let data = [
    {name:'echo'},
    {name:'聽風是風'},
    {name:'天子笑'},
    ],
    val = {name:'天子笑'};
JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1;//true

    val1 = {name:'天笑'};
JSON.stringify(data).indexOf(JSON.stringify(val1)) !== -1;//false


let i = [1,2,3],
    b = [1,2,3];
JSON.stringify(i) === JSON.stringify(b);//true

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章