json.stringfy()將對象、數組轉換成字符串;json.parse()將字符串轉成json對象。
json.stringfy():
語法:
JSON.stringify(value [, replacer] [, space])
- value:是必選字段。就是你輸入的對象,比如數組,類等。
- replacer:這個是可選的。它又分為2種方式,一種是數組,第二種是方法。
情況一:replacer為數組時,通過后面的實驗可以知道,它是和第一個參數value有關系的。一般來說,系列化后的結果是通過鍵值對來進行表示的。 所以,如果此時第二個參數的值在第一個存在,那么就以第二個參數的值做key,第一個參數的值為value進行表示,如果不存在,就忽略。
情況二:replacer為方法時,那很簡單,就是說把系列化后的每一個對象(記住是每一個)傳進方法里面進行處理。
- space:就是用什么來做分隔符的。
1)如果省略的話,那么顯示出來的值就沒有分隔符,直接輸出來 。
2)如果是一個數字的話,那么它就定義縮進幾個字符,當然如果大於10 ,則默認為10,因為最大值為10。
3)如果是一些轉義字符,比如“\t”,表示回車,那么它每行一個回車。
4)如果僅僅是字符串,就在每行輸出值的時候把這些字符串附加上去。當然,最大長度也是10個字符。
下面用實例說明;
1)只有第一個參數的情況下
//1 var student = new Object(); student.name = "Lanny"; student.age = "25"; student.location = "China"; var json = JSON.stringify(student); alert(json); //alert(student);
結果如下圖:
有些人可能會懷疑JSON.stringify的作用。那假如,我們不要這個函數,而直接alert(student),結果如下:
這次意識到JSON.stringify的作用了吧。
2)第二個參數存在,並且第二個參數還是function的時候
//2 var students = new Array() ; students[0] = "onepiece"; students[1] = "naruto"; students[2] = "bleach"; var json = JSON.stringify(students,switchUpper); function switchUpper(key, value) { return value.toString().toUpperCase(); } alert(json); /*下面這種方式也可以 var json = JSON.stringify(students, function (key,value) { return value.toString().toUpperCase()}); alert(json); */
運行結果如下:
3)第二個參數存在,並且第二個參數不是function,而是數組的時候
//3 var stuArr1 = new Array() ; stuArr1[0] = "onepiece"; stuArr1[1] = "naruto"; stuArr1[2] = "bleach"; var stuArr2 = new Array(); stuArr2[0] = "1"; stuArr2[1] = "2"; var json = JSON.stringify(stuArr1,stuArr2) alert(json);
運行結果如下:
第二個參數被忽略了,只是第一個參數被系列化了。
4)如果第一個參數是對象,第二個參數是數組的情況
//4 var stuObj = new Object(); stuObj.id = "20122014001"; stuObj.name = "Tomy"; stuObj.age = 25; var stuArr = new Array(); stuArr[0] = "id"; stuArr[1] = "age"; stuArr[2] = "addr";//這個stuObj對象里不存在。 var json = JSON.stringify(stuObj,stuArr); //var json = JSON.stringify(stuObj,stuArr,1000); //var json = JSON.stringify(stuObj,stuArr,'\t'); //var json = JSON.stringify(stuObj,stuArr,'OK '); alert(json);
運行結果如下:
第三個參數為數字時候的輸出結果:
第三個參數為轉義字符\t的時候輸出的結果:
第三個參數為字符串時候的輸出結果:
參考資料:
http://www.jb51.net/article/29893.htm
json.parse():
JSON.parse(text [, reviver])
- text
-
必需。 一個有效的 JSON 字符串。
- reviver
-
可選。 一個轉換結果的函數。 將為對象的每個成員調用此函數。 如果成員包含嵌套對象,則先於父對象轉換嵌套對象。 對於每個成員,會發生以下情況:
-
如果 reviver 返回一個有效值,則成員值將替換為轉換后的值。
-
如果 reviver 返回它接收的相同值,則不修改成員值。
-
如果 reviver 返回 null 或 undefined,則刪除成員。
-
一個對象或數組。
以下示例使用 JSON.parse 將 JSON 字符串轉換成對象。
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
document.write(contact.surname + ", " + contact.firstname);
// Output: Aaberg, Jesper
以下示例演示了如何使用 JSON.stringify 將數組轉換成 JSON 字符串,然后使用 JSON.parse 將該字符串重新轉換成數組。
var arr = ["a", "b", "c"];
var str = JSON.stringify(arr);
document.write(str);
document.write ("<br/>");
var newArr = JSON.parse(str);
while (newArr.length > 0) {
document.write(newArr.pop() + "<br/>");
}
// Output:
// ["a","b","c"]
// c
// b
// a
reviver 函數通常用於將國際標准化組織 (ISO) 日期字符串的 JSON 表示形式轉換為協調世界時 (UTC) 格式 Date 對象。 此示例使用 JSON.parse 來反序列化 ISO 格式的日期字符串。dateReviver函數為格式為 ISO 日期字符串的成員返回Date對象。
var jsontext = '{ "hiredate": "2008-01-01T12:00:00Z", "birthdate": "2008-12-25T12:00:00Z" }';
var dates = JSON.parse(jsontext, dateReviver);
document.write(dates.birthdate.toUTCString());
function dateReviver(key, value) {
var a;
if (typeof value === 'string') {
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
};
// Output:
// Thu, 25 Dec 2008 12:00:00 UTC
參考資料:https://technet.microsoft.com/zh-cn/sysinternals/cc836466(en-us,VS.85).aspx