Discontent is the first step in progress.
不知足是前進中的第一步。
JSON是JavaScript Object Notation的縮寫,它是一種數據交換格式。
JSON 實際上是JavaScript的一個子集。在JSON中,一共就這么幾種數據類型:
- number:和 JavaScript 的
number
完全一致; - boolean:就是 JavaScript 的
true
或false
; - string:就是 JavaScript 的
string
; - null:就是 JavaScript 的
null
; - array:就是 JavaScript 的
Array
表示方式——[]
; - object:就是 JavaScript 的
{ ... }
表示方式。
JSON 還定死了字符集必須是UTF-8
,表示多語言就沒有問題了。為了統一解析,JSON的字符串規定必須用雙引號""
,Object
的鍵也必須用雙引號""
JavaScript 內置了 JSON 的解析
序列化
對象序列化成
JSON
格式的字符串
var person = {
name: "Eric",
age: 28,
gender: "Male",
height: 1.65,
grade: null,
married: true
childs: ["Baby","Vicy"]
};
JSON.stringify(person); // '{"name":"Eric","age":28,"gender":"Male","height":1.65,"grade":null,married: true,"childs":["Baby","Vicy"]}'
要輸出得好看一些,可以加上參數,按縮進輸出:
JSON.stringify(person, null, ' ');
{
"name": "Eric",
"age": 28,
"gender": "Male",
"height": 1.65,
"grade": null,
"married": true
"childs": [
"Baby",
"Vicy"
]
}
第二個參數用于控制如何篩選對象的鍵值,如果我們只想輸出指定的屬性,可以傳入Array
:
JSON.stringify(person, ["name", "childs"], ' ');
{
"name": "Eric",
"childs": [
"Baby",
"Vicy"
]
}
還可以傳入一個函數,這樣對象的每個鍵值對都會被函數先處理:
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
JSON.stringify(person, convert, ' ');
{
"name": "ERIC",
"age": 28,
"gender": "MALE",
"height": 1.65,
"grade": null,
"married": true
"childs": [
"BABY",
"VICY"
]
}
反序列化
JSON
格式的字符串,我們直接用JSON.parse()
把它變成一個JavaScript
對象
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"Vivian","age":18}'); // Object {name: "Vivian", age: 18}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
JSON.parse()
還可以接收一個函數,用來轉換解析出的屬性:
JSON.parse('{"name":"Vivian","age":18}', function (key, value) {
// 拼接知道字符串
if (key === "name") {
return value + " is beautiful";
}
return value;
}); // Object {name: "Vivian is beautiful", age: 18}