1. 程式人生 > >ajax的string和json物件之間轉換

ajax的string和json物件之間轉換

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於ECMAScript的一個子集。

在AJAX實現前後臺數據互動的時候,通常使用JSON的資料格式,對於JSON來說,有嚴格的程式碼規範,一旦格式出問題,就無法顯示出相應效果,同時還不在控制檯報錯

 

一、Json物件轉換為json字串

1)使用瀏覽器自帶的JSON物件:JSON.stringify(jsonObj),缺點是相容性不好,對於ie8以下的版本不支援。

var jsonObj = {"id":1,"username":"admin","password":"admin123","state":1,"regDate":"2018-10-14","roles":[{"id":1,"roleName":"超級管理員","state":1}]};
var jsonStr = JSON.stringify(jsonObj);
alert(jsonStr);

2)引用 json2.js ,使用JSON物件轉換:JSON.stringify(jsonObj),相容所有瀏覽器 

<script type="text/javascript" src="./static/js/json2.js"></script>

var jsonObj = {"id":1,"username":"admin","password":"admin123","state":1,"regDate":"2018-10-14","roles":[{"id":1,"roleName":"超級管理員","state":1}]};
var jsonStr = JSON.stringify(jsonObj);
alert(jsonStr);

注意:

$.ajax 傳到後臺的data資料型別string:基本簡單型別會自動處理成json物件,如果包含複雜型別(陣列,集合等)就必須轉為json物件,並宣告 contentType:"application/json;charset=utf-8",

contentType:"application/json;charset=utf-8", //傳過去的資料格式,從js物件格式轉化為jsonStr格式
data:JSON.stringify({	
    username: row.username,	
    password: row.password,	
    regDate: row.regDate,	
    roles: [{id:$("#roleValueId").val(),roleName:$("#roleTextName").val()}]    
}),    

 

二、json字串轉換為Json物件 

1)使用瀏覽器自帶的JSON物件:JSON.parse(jsonStr),缺點是相容性不好,對於ie8以下的版本不支援。

var jsonStr = '{"id":1,"username":"admin","password":"admin123","state":1,"regDate":"2018-10-14","roles":[{"id":1,"roleName":"超級管理員","state":1}]}';
var jsonObj = JSON.parse(jsonStr);
alert(jsonObj);

 

2)引用 json2.js ,使用JSON物件轉換:JSON.parse(jsonStr),相容所有瀏覽器

<script type="text/javascript" src="./static/js/json2.js"></script>

var jsonStr = '{"id":1,"username":"admin","password":"admin123","state":1,"regDate":"2018-10-14","roles":[{"id":1,"roleName":"超級管理員","state":1}]}';
var jsonObj = JSON.parse(jsonStr);
alert(jsonObj);

3)使用 Ajax 的轉換物件:$.parseJSON(jsonStr)

var jsonStr = '{"id":1,"username":"admin","password":"admin123","state":1,"regDate":"2018-10-14","roles":[{"id":1,"roleName":"超級管理員","state":1}]}';
var jsonObj = $.parseJSON(jsonStr);
alert(jsonObj);

4)使用 eval() 物件 注意:json字串的兩端需要加上一個括號(此方法不推薦)

var jsonStr = '{"id":1,"username":"admin","password":"admin123","state":1,"regDate":"2018-10-14","roles":[{"id":1,"roleName":"超級管理員","state":1}]}';
var jsonObj = eval("(" + jsonStr + ")");
alert(jsonObj);

提示:為什麼要 eval這裡要新增  ( "(" + jsonStr + ")" ); 呢?

  原因在於:eval本身的問題。 由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表示式。加上圓括號的目的是迫使eval函式在處理JavaScript程式碼的時候強制將括號內的表示式(expression)轉化為物件,而不是作為語句(statement)來執行。舉一個例子,例如物件字面量{},如若不加外層的括號,那麼eval會將大括號識別為JavaScript程式碼塊的開始和結束標記,那麼{}將會被認為是執行了一句空語句。 

  

注意:

目前,Firefox、Opera、IE8以上版本也提供了本地JSON支援。其中,JSON直譯器提供的函式有:JSON.parse、JSON.stringify。 對於那些並不提供本地JSON支援的瀏覽器可以引入指令碼json2.js,來實現JSON轉換功能。

json2.js 指令碼下載 https://github.com/douglascrockford/JSON-js/blob/master/json2.js

 

三、$.ajax簡單例項

		 $.ajax({   
			type : "get",
			url : "/sshweb_ui/user/Userid",
			data : {id:1},
			dataType : "json",
			success : function(data){
				console.log(data);//後臺json資料物件
				console.log(data.username);
				console.log(data.roles[0].roleName);
				console.log(JSON.stringify(data)); //後臺json資料轉換為jsonStr
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
			    alert(XMLHttpRequest.status);
			    alert(XMLHttpRequest.readyState);
			    alert(textStatus + "ajax出錯了");
			}

		});