
JavaScript 語言核心(17)輕量資料格式 JSON
JSON 全名 JavaScript Object Notation,為 JavaScript 物件實字(Object literal)的子集,你可以在 Introducing JSON 找到詳細的 JSON 格式說明。大致而言,與物件實字格式類似,主要注意的是JSON:
舉個例子來說,下面是個物件實字: var obj = { name : 'Justin', age : 35, childs : [ {name : 'hamimi', age : 3} ] }; 若使用JSON表示,則是如下: var json = '{"name":"Justin","age":35,"childs":[{"name":"hamimi","age":3}]}'; 若為排版會比較容易觀察: { "name":"Justin", "age":35, "childs":[ { "name":"hamimi", "age":3 } ] } JSON.stringifyECMAScript 5 規範中,如果要從物件建立 JSON 字串,只要使用 var obj = { name : 'Justin', age : 35, childs : [ {name : 'hamimi', age : 3} ] }; var json = JSON.stringify(obj); // {"name":"Justin","age":35,"childs":[{"name":"hamimi","age":3}]} console.log(json); //{"name":"Justin","age":35} console.log(JSON.stringify(obj, ['name', 'age']));
第一次呼叫指定函式時,鍵為空字串,而值為要被轉換的物件本身,之後逐一以每個特性與值來呼叫函式,傳回值若是數字、字串、布林值,就會被加入 JSON 字串,如果傳回物件,則會遞迴地呼叫指定的函式進行轉換,如果傳回 例如,上頭的 var obj = { name : 'Justin', age : 35, childs : [ {name : 'hamimi', age : 3} ] }; console.log(JSON.stringify(obj, function(key, value) { if(key === 'age'){ return undefined; } return value; }));
var obj = { name : 'Justin', age : 35, childs : [ {name : 'hamimi', age : 3} ] }; function replacer(key, value) { return key === 'age' ? undefined : value; } console.log(JSON.stringify(obj, replacer, 2)); 顯示的結果會是兩個空格縮排: { "name": "Justin", "childs": [ { "name": "hamimi" } ] } 如果物件本身定義有 var obj = { name : 'Justin', age : 35, toJSON : function() { return { name : this.name.toUpperCase(), age : this.age }; } }; // {"name":"JUSTIN","age":35} console.log(JSON.stringify(obj)); JSON.parse如果想將 JSON 字串剖析為 JavaScript 物件,可以使用 var json = '{"name":"Justin","age":35,"childs":[{"name":"hamimi","age":3}]}'; var obj = JSON.parse(json); console.log(obj.name); // Justin 每個鍵值被剖析為值之後,可以指定一個函式來決定被剖析後的值如何轉換,傳回的值決定了最後得到的物件上之特性值,如果傳回 var json = '{"name":"Justin","age":35,"childs":[{"name":"hamimi","age":3}]}'; var obj = JSON.parse(json, function(key, value) { if(key === 'age'){ return undefined; } return value; }); console.log(obj); // { name: 'Justin', childs: [ { name: 'hamimi' } ] } 如果是沒有內建 JSON 支援的平台(像是一些舊瀏覽器),可以在 Introducing JSON 下載 json2.js,用以獲得上述的相關 JSON 方法。 |