官方地址:https://github.com/douglascrockford/JSON-jshtml
在數據傳輸過程當中,json是以文本,即字符串的形式傳遞的,而JS操做的是JSON對象,因此,JSON對象和JSON字符串之間的相互轉換是關鍵jquery
例如:git
JSON字符串:
var json_string = '{ "name": "myname", "sex": "男" }';
JSON對象:
var json_obj= { "name": "myname", "sex": "男" };github
1、JSON字符串轉換爲JSON對象json
要使用上面的json_string,必須使用下面的方法先轉化爲JSON對象:服務器
//由JSON字符串轉換爲JSON對象app
var obj = eval('(' + json_string+ ')'); //該方式有漏洞,會執行json_string 裏的函數,容易被注入攻擊異步
或者函數
var obj = json_string.parseJSON(); //由JSON字符串轉換爲JSON對象url
或者
var obj = JSON.parse(json_string); //由JSON字符串轉換爲JSON對象
而後,就能夠這樣讀取:
Alert(obj.name);
Alert(obj.sex);
特別注意:若是obj原本就是一個JSON對象,那麼使用eval()函數轉換後(哪怕是屢次轉換)仍是JSON對象,可是使用parseJSON()函數處理後會有問題(拋出語法異常)。
2、可使用toJSONString()或者全局方法JSON.stringify()將JSON對象轉化爲JSON字符串。
例如:
var last=obj.toJSONString(); //將JSON對象轉化爲JSON字符
或者
var last=JSON.stringify(obj); //將JSON對象轉化爲JSON字符
alert(last);
注意:
上面的幾個方法中,除了eval()函數是js自帶的以外,其餘的幾個方法都來自json.js包。新版本的 JSON 修改了 API,將 JSON.stringify() 和 JSON.parse() 兩個方法都注入到了 Javascript 的內建對象裏面,前者變成了 Object.toJSONString(),然後者變成了 String.parseJSON()。若是提示找不到toJSONString()和parseJSON()方法,則說明您的json包版本過低。
所以爲了統一化最好在頁面導入json.js 插件
三 、jq 格式化JSON
$(function() {
var json_string = '[{"id":"1","tagName":"apple"},{"id":"2","tagName":"orange"},{"id":"3","tagName":"banana"},{"id":"4","tagName":"watermelon"},{"id":"5","tagName":"pineapple"}]';//JSON 字符串
var json_obj = [{"id":"1","tagName":"apple"},{"id":"2","tagName":"orange"},{"id":"3","tagName":"banana"},{"id":"4","tagName":"watermelon"},{"id":"5","tagName":"pineapple"}];//JSON 對象
//JQ 中,json字符串轉對象 $.parseJSON(str)
$.each($.parseJSON(json_string ), function(idx, obj) {
console.log(idx+"~~~"+obj.tagName);
});
});
$.getJSON()
對於服務器返回的JSON字符串,若是jquery異步請求將dataType (通常爲這個配置屬性)設爲「json」,或者利用$.getJSON()方法得到服務器返回,那麼就不須要eval()方法了,由於這時候獲得的結果已是json對象了.
$.getJSON(url,{param:"參數"},function(data){
//此處返回的data已是json對象
$.each(data.root,function(idx,item){
if(idx==0){
return true;//同countinue,返回false同break
}
console.log("name:"+item.name+",value:"+item.value);
});
});
返回的數據可用js 提供的typeof(data) 來判斷data數據的類型
五種基本數據類型 number string boolean undefined object和函數類型 function
延伸:Object.prototype.toString.call 原生原型擴展函數,用來更精確的區分數據類型。
var gettype=Object.prototype.toString
gettype.call('aaaa') 輸出 [object String]
gettype.call(2222) 輸出 [object Number]
gettype.call(true) 輸出 [object Boolean]
gettype.call(undefined) 輸出 [object Undefined]
gettype.call(null) 輸出 [object Null]
gettype.call({}) 輸出 [object Object]
gettype.call([]) 輸出 [object Array]
gettype.call(function(){}) 輸出 [object Function]
參考:https://www.cnblogs.com/a546558309/p/3608194.html