javascript筆記--(第二十五章)JSON

JSON


SON和XML類型,都是一種結構化的數據表示方式。所以,JSON並不是JavaScript獨有的數據格式,其他很多語言都可以對JSON進行解析和序列化。

JSON語法


JSON的語法可以表示三種類型的值:簡單值,對象,數組。

簡單值


可以在JSON中表示字符串、數值、布爾值和null。但JSON不支持JavaScript中的特殊值undefined。

對象


JSON中的對象表示法需要加上雙引號
{
	"name" : "Lee",//使用雙引號,否則轉換會出錯
	"age" : 100
}

數組


[100, "Lee", true]

一般比較常用的一種複雜形式是數組結合對象的形式:
[
	{
		"title" : "a",
		"num" : 1
	},
	{
		"title" : "b",
		"num" : 2
	},
	{
		"title" : "c",
		"num" : 3
	}
]

解析和序列化


JSON對象提供了兩個方法,一個是將原生JavaScript值轉換爲JSON字符串:stringify();另一個是將JSON字符串轉換爲JavaScript原生值:parse()。

stringify()


stringify()方法接受三個參數,第一個是必須的,其他兩個可選。第二個參數可以是一個數組,也可以是一個函數,用於過濾結果。第三個個參數則表示是否在JSON字符串中保留縮進。

<script type="text/javascript">
	var box = [{name : 'a', age : 1, height : 177},{name : 'b', age : 2, height : 188}];
	var json = JSON.stringify(box, ['name'],0);//[{"name":"a"},{"name":"b"}]
	console.log(json);
</script>
如果不需要保留縮進,則不填即可;如果不需要過濾結果,但又要保留縮進,則講過濾結果的參數設置爲null。如果採用函數,可以進行復雜的過濾

<script type="text/javascript">
	var box = [{name : 'a', age : 1, height : 177},{name : 'b', age : 2, height : 188}];
	var json = JSON.stringify(box, ['name'],4);
	console.log(json);
</script>

運行結果

函數不能刪除鍵值對,只能修改,並且不能返回null或者空字符串

還有一種方法可以自定義過濾一些數據,使用toJSON()方法,可以將某一組對象裏指定返回某個值。
<script type="text/javascript">
	var box = [{name : 'a', age : 1, height : 177, toJSON : function () {
		return this.name;
	}},{name : 'b',age : 2, height : 188, toJSON : function () {
		return this.name;
	}}];
	var json = JSON.stringify(box, function (key, value) {
		switch (key) {
			case 'name' : 
				return 'Mr. ' + value;
			case 'age' : 
				return value + 'year';
			default : 
				return value;
		}
	}, 4);
	console.log(json);
</script>

運行結果

如果對象裏已經有了toJSON函數,則第二個參數是無效的


parse()


parse()接受兩個參數,第一個是必須的,第二個參數是一個函數(數組無效)
<script type="text/javascript">
	var box = '[{"name" : "a","age" : 1},{"name" : "b","age" : 2}]';
	var json = JSON.parse(box, function (key, value) {
		if (key == 'name') {
			return 'Mr. ' + value;
		} else {
			return value;
		}
	});
	console.log(json[0].name);
</script>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章