JavaScript之JSON

JSON是JavaScript Object Notation的縮寫,它是一種數(shù)據(jù)交換格式
JSON實(shí)際上是JavaScript的一個子集。在JSON中,一共就這么幾種數(shù)據(jù)類型:
number:和JavaScript的number完全一致;
boolean:就是JavaScript的true或false;
string:就是JavaScript的string;
null:就是JavaScript的null;
array:就是JavaScript的Array表示方式——[];
object:就是JavaScript的{ ... }表示方式。
以及上面的任意組合
JSON還定死了字符集必須是UTF-8,表示多語言就沒有問題了。
為了統(tǒng)一解析,JSON的字符串規(guī)定必須用雙引號"",Object的鍵也必須用雙引號""。
幾乎所有編程語言都有解析JSON的庫,而在JavaScript中,我們可以直接使用JSON,因?yàn)镴avaScript內(nèi)置了JSON的解析。
把任何JavaScript對象變成JSON,就是把這個對象序列化成一個JSON格式的字符串,這樣才能夠通過網(wǎng)絡(luò)傳遞給其他計(jì)算機(jī)。
如果我們收到一個JSON格式的字符串,只需要把它反序列化成一個JavaScript對象,就可以在JavaScript中直接使用這個對象了。

1.序列化
讓我們先把小明這個對象序列化成JSON格式的字符串:
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '"W3C" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};
JSON.stringify(xiaoming);
要輸出的好看,可以加上參數(shù),按縮進(jìn)輸出
JSON.stringify(xiaoming, null, ' ');
第二個參數(shù),用于控制如何篩選對象的鍵值,如果只想輸出指定的屬性,可以傳入數(shù)組:
JSON.stringify(xiaoming, ['name', 'skills'], ' ');
還可以傳入一個函數(shù),這樣對象的每個鍵值對都會被函數(shù)先處理:
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}

JSON.stringify(xiaoming, convert, ' ');
上面的代碼把所有的屬性值都變成大寫.
如果我們還想要精確控制如何序列化小明,可以給xiaoming定義一個toJSON()的方法,直接返回JSON應(yīng)該序列化的數(shù)據(jù):
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '"W3C" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
toJSON: function () {
return { // 只輸出name和age,并且改變了key:
'Name': this.name,
'Age': this.age
};
}
};

JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'

2.反序列化
拿到一個JSON格式的字符串,我們直接用JSON.pares()把它變成一個JavaScript對象
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
JSON.parse()還可以接收一個函數(shù),用來轉(zhuǎn)換解析出的屬性:
JSON.parse('{"name":"小明","age":14}', function (key, value) {
// 把number * 2:
if (key === 'name') {
return value + '同學(xué)';
}
return value;
});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 本文是在學(xué)習(xí)廖雪峰先生的JavaScrip教程 后的歸納 一、標(biāo)準(zhǔn)對象 typeofJavaScript的世...
    ting723閱讀 361評論 0 2
  • 2.包裝對象 4.json 4.1.序列化 4.2.反序列化
    wyude閱讀 320評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評論 19 139
  • 一、JSON 格式的數(shù)據(jù)需要遵循什么規(guī)則 JSON 格式(JavaScript Object Notation 的...
    抱著熊喵啃什么閱讀 238評論 0 1
  • 2017年6月17號,豐鑫茶業(yè)第一屆交流群,在各位伙伴的支持和號召下,圓滿結(jié)束 第一次聚會,很多地方照顧不周全,謝...
    dffa28c963e9閱讀 548評論 0 0

友情鏈接更多精彩內(nèi)容