JSON

官方地址: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

相關文章
相關標籤/搜索