JSON.parse() 方法

admin發表於2019-07-13

JSON.parse()方法是JSON物件的兩個靜態方法之一。

通過JSON.stringify()方法可以將引數轉換為JSON資料,具體參閱JSON.stringify()一章節。

而利用JSON.parse()可以將JSON資料解析為最初的資料,當然有很多細節需要注意。

關於JSON物件更多內容可以參閱JSON 物件一章節。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
JSON.parse(text [, reviver])

引數解析:

1.text:必需,一個有效的JSON格式字串。

2.reviver:可選,一個函式,它用來轉換已經被從text字串轉為物件的物件,規則如下:

  (1).如果reviver返回一個有效值,則對應的屬性值將替換為轉換後的值。

  (2).如果reviver返回它接收的相同值,則不修改對應屬性值。

  (3).如果reviver返回undefined,則刪除對應的屬性。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let jsonStr=JSON.stringify("螞蟻部落");
let jsonNum=JSON.stringify(5);
let jsonBool=JSON.stringify(true);
console.log(jsonStr.length);
console.log(typeof jsonNum);
console.log(typeof jsonBool);

console.log(JSON.parse(jsonStr).length);
console.log(typeof JSON.parse(jsonNum));
console.log(typeof JSON.parse(jsonBool));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/13/124138jwlt77nb7xlxn7ny.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼演示了JSON.parse()方法解析還原資料的功能。

程式碼很簡單,唯一需要說明一下就是字串長度的變化,分析如下:

(1).字串"螞蟻部落",最初由四個字元組成,這一點毫無疑問。

(2).JSON.stringify方法處理後可以理解變成了'"螞蟻部落"',雙引號也被轉換為普通的字元了。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let jsonStr='{"webName":"螞蟻部落","url":"softwhy.com","age":"2"}';
let antzone=JSON.parse(jsonStr);
console.log(antzone.webName);

上面程式碼,省略第二個引數,直接將JSON字串轉換為JavaScript物件字面量。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let antzone={
  webName:"螞蟻部落",
  age:undefined
}
let jsonStr=JSON.stringify(antzone);
console.log(JSON.parse(jsonStr));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/13/124223g2l0om0o90r2o88y.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

我們知道undefined、function函式和Symbol是不被JSON所支援的。

通過JSON.stringify方法轉換後,age屬性會被忽略,再通過JSON.parse()方法解析也不會回到最初。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function reviver(key,value){
  if(key=="webName"){
    return "antzone";
  }
  return value;
}
let jsonStr='{"webName":"螞蟻部落","url":"softwhy.com","age":"2"}';
let antzone=JSON.parse(jsonStr,reviver);
console.log(antzone);

上面程式碼中,使用第二個引數進行轉換,下面對此引數函式做一下簡單介紹:

(1).此函式具有兩個引數,第一個引數是屬性名稱,第二個引數是屬性值。

(2).此函式會對js物件的每一個成員支援相應的轉換操作。

上面的程式碼會將物件中,屬性名稱為"webName"的值會被修改為"antzone"。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function reviver(key,value){
  if(key=="webName"){
    return "antzone";
  }else if(key=="age"){
    return undefined;
  }
  return value;
}
let jsonStr='{"webName":"螞蟻部落","url":"softwhy.com","age":2}';
let antzone=JSON.parse(jsonStr,reviver);
console.log(antzone);

轉換函式返回值是undefined,那麼對應的屬性就會被刪除。

相關文章