JSON.stringify() 方法

admin發表於2019-07-12

一.基本介紹:

此方法可以將JavaScript值轉換為JSON格式字串。

通常情況下要被轉換的值是物件直接量或者陣列。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
JSON.stringify(value [, replacer] [, space])

引數解析:

(1).value:必需,要被轉換的JavaScript值,可以是任意值,通常情況下是物件直接量或者陣列。

(2).replacer:可選,用以進行對value進行轉換的函式或者陣列。

(3).space:可選,向返回的JSON中的內容新增縮排、空白和換行符以使其更易於閱讀。

上面只是對引數的作用做了一下簡單介紹,可以讓讀者對其有一個初步印象,具體的作用在程式碼下面的程式碼例項中介紹。

二.程式碼例項:

(1).只具有第一個引數的情況:

[JavaScript] 純文字檢視 複製程式碼
var obj={
  webName:"螞蟻部落",
  target:"分享互助",
  age:3
}
console.log(JSON.stringify(obj));

上面的程式碼只含有第一個引數,並且引數是一個物件直接量。

[JavaScript] 純文字檢視 複製程式碼
var arr=["螞蟻部落","分享互助",3];
console.log(JSON.stringify(arr));

再來看一段程式碼:

[JavaScript] 純文字檢視 複製程式碼
var date=new Date();
var str=new String("螞蟻部落");
console.log(JSON.stringify(date));
console.log(JSON.stringify(str));

如果函式的第一個引數是物件,那麼引數物件會首先嚐試呼叫toJSON()方法。

只有Date物件具有內建的toJSON()函式,對於String、Number和Boolean物件在json2.js中是使用自定義的方式,呼叫的valueOf()函式,程式碼截圖如下:

1.jpg

關於toJSON()方法可以參閱toJSON()一章節。

(1).具有兩個引數的情況:

JSON.stringify()第二個引數可以是兩種形式,一種是函式,第二種是陣列,下面分別做一下介紹。

當是函式的情況:

具有兩個引數,分別是物件的屬性和屬性值,或者陣列的索引和物件的陣列值。

它的返回值對於value引數的序列化結果有直接的影響。

1).如果返回值是undefined,那麼value引數序列化的結果為undefined或者當前遞迴序列化物件的屬性被刪除。

2).如果返回值是一個物件,那麼該物件會被遞迴序列化。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var arr=["螞蟻部落","antzone",2];
function done(key,value){
}
var jsonText=JSON.stringify(arr,done);
console.log(jsonText);

上面的程式碼中,陣列被序列化後的結果為undefined,因為第二個引數函式的返回值是undefined。

[JavaScript] 純文字檢視 複製程式碼
var obj={
  webName:"antzone",
  age:2,
  target:"分享互助",
  team:{
    a:"jquery專區",
    b:"css專區"
  }
}
function done(key,value){
  if(value=="antzone"){
    return undefined;
  }
  else{
    return value;
  }
}
var jsonText=JSON.stringify(obj,done);
console.log(jsonText);

當屬性值為"antzone"的時候,那麼對應的屬性就會被刪除,如果此函式返回的值是物件的話,那麼會將此返回的物件遞迴序列化。

當是陣列的時候:

如果第二個引數是陣列,主要分如下兩種情況:

(1).如果value引數是陣列,那麼第二個引數陣列不起任何作用。

(2).如果value引數是物件,那麼第二個引數陣列會對第一個引數屬性起到過濾作用,規則如下:

如果物件屬性名稱在陣列元素中存在,那麼此屬性將會被保留,否則會被刪除。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var one=["螞蟻部落","antzone","分享互助",3];
var two=["antzone",3];
var jsonText=JSON.stringify(one,two);
console.log(jsonText);

第二個陣列引數不會起到任何作用。

[JavaScript] 純文字檢視 複製程式碼
var obj={
  antzone:"螞蟻部落",
  target:"分享互助",
  age:3
}
var arr=["antzone",3];
var jsonText=JSON.stringify(obj,arr);
console.log(jsonText);

第二個引數陣列會對物件屬性進行過濾,如果物件屬性名稱在陣列中存在,那麼就會保留,否則刪除。3.第三個引數的作用:

可以向返回值JSON文字新增縮排,具體規則如下:

如果宣告此引數,則將生成返回值文字,而沒有任何額外空白。

如果是數字,則返回值文字在每個級別縮排指定數目的空格。 如果 space 大於 10,則文字縮排 10 個空格。

如果是一些轉義字元,比如“\t”,表示回車,那麼它每行一個回車。

如果是非空字串,則返回值文字在每個級別字串前面附加上返回的字串即可。

如果是長度大於10個字元的字串,則使用前10個字元。

由於這個比較簡單,就不給出程式碼了,通常情況下,第三個引數都是省略的。

相關文章