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 方法。 |

Java 學習之路




