js學習五-JSON

EpisodeOne發表於2016-05-15
JavaScript Object Notation,是一種輕量級的資料交換格式
注意:屬性名要用“”括起來,建構函式中的屬性名不需要用“”括起來
 JSON字串的格式一定要標準,key和value一定要用雙引號包括,否則會出線解析異常
  特點:輕量級,純文字,適合不同語言間的互動
方法:
1.JSON.parse(text[,reviver])
text為JSON格式的字串,JSON.parse 將 JSON 字串轉換為物件
在IE6/7上不支援JSON.parse

解決方法:

if(!window.JSON) {
    window.JSON = {
	parse:function(sJSON) {
	    return eval('('+sJSON+')')
	},
	//eval就是將字串按照js物件進行處理
	stringify: function(obj){
            var result = "";
            for(var key in obj){
                if(typeof obj[key] == "string"){
                    // 如果屬性值是String型別,屬性值需要加上雙引號
                    result += "\"" + key + "\":\"" + obj[key] + "\",";
                }else if(obj[key] instanceof RegExp){
                    // 如果屬性是正規表示式,屬性值只保留一對空大括號{}
                    result += "\"" + key + "\":{},";
                }else if(typeof obj[key] == "undefined" || obj[key] instanceof Function){
                    // 如果屬性值是undefined, 該屬性被忽略。忽略方法。
                }else if(obj[key] instanceof Array){
                    // 如果屬性值是陣列
                    result += "\"" + key + "\":[";
                    var arr = obj[key];
                    for(var item in arr){
                        if(typeof arr[item] == "string"){
                            // 如果陣列項是String型別,需要加上雙引號
                            result += "\"" + arr[item] + "\",";
                        }else if(arr[item] instanceof RegExp){
                            // 如果屬陣列項是正規表示式,只保留一對空大括號{}
                            result += "{},";
                        }else if(typeof arr[item] == "undefined" || arr[item] instanceof Function){
                            // 如果陣列項是undefined, 則顯示null。如果是函式,則顯示null?。
                            result += null +",";
                        }else if(arr[item] instanceof Object){
                            //如果陣列項是物件(非正則,非函式,非null),呼叫本函式處理
                            result += this.stringify(arr[item]) +",";
                        }else{
                            result += arr[item] + ",";
                        }
                    }
                    result = result.slice(0,-1)+"],"
                 
                }else if(obj[key] instanceof Object){
                    // 如果屬性值是物件(非null,非函式,非正則),呼叫本函式處理
                    result += "\"" + key + "\":" + this.stringify(obj[key]) + ",";
                }else{
                    result += "\"" + key + "\":" + obj[key] + ",";
                }
            }
            // 去除最後一個逗號,兩邊加{}
            return "{" + result.slice(0,-1) + "}";
    	}
	};
}

2.JSON.stringify(obj)
將obj物件轉換成JSON格式的字串的格式
在IE6/7上不支援JSON.

code

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>JSON</title>
</head>
<body>
	<script type="text/javascript">
		var onepiece = {
		id:1,
		nick:"caomao",
		name:"lufei",
		status:"captain",
		years:"18"
		};
		var test = '{"id":1,"nick":"caomao","name":"lufei","status":"captain","years":"18"}';
		var op1 = JSON.stringify(onepiece);
		// var op2 = JSON.parse(onepiece);
		console.log('op1');
		console.log(op1);
		// {"id":1,"nick":"caomao","name":"lufei","status":"captain","years":"18"}
		var op2 = JSON.stringify(onepiece, ['id','name','status']);
		console.log(op2)
		//{"id":1,"name":"lufei","status":"captain"}只顯示JSON物件中的部分資訊
		var op3 = JSON.parse(test);
		//JSON.parse 將 JSON 字串轉換為物件
		console.log(op3);
		// Object {id: 1, nick: "caomao", name: "lufei", status: "captain", years: "18"}
		debugger;

	</script>
	</body>
</html>




相關文章