2012-02-07 8 views
0

我剛從這整個JSON和JQuery的事情,我想讀的JSON結構從德爾福的DataSnap來,例如:如何閱讀使用JQuery的JSON結果中的字段:{}內容?

{"result":[[{"type":"VOMesas.TMesas","id":1,"fields":{ "FUsers":1,"FEnclosing":0,"FClientName":"","FCode":100,"FStatus":1,"FTotalValue":128.25}}]]} 

我如何用jQuery讀它,更especifically字段:{...}內容?

編輯:

這裏的功能即時試圖做

function getContent(order) { 
     $.getJSON("query.json", 
    function(data) { 
     $.each(data.result, function(i, item) { 

     var grid = '<table border="1">'; 

     for (var i=0; i < item.length; i++){ 
      CAMPO = item[i]; 

      ... 

回答

1

如果您是通過jQuery.ajax或類似的加載數據和它正在與正確的MIME類型返回(或者你告訴jQuery.ajax正是你找回是JSON),那麼你在success回調收到這將是一個反序列化對象(不再JSON,而是JSON描述的對象)。既然如此,你只需訪問該對象的屬性,如:

$.ajax({ 
    // ... 
    success: function(data) { 
     var fields = data.result[0][0].fields; 
    } 
}); 

data作爲變量指向的對象,其中有一個result屬性,與只有一個項的數組(所以,進入[0]) ,它本身就是另一個具有一個條目的數組(即,再次輸入[0]),該對象的屬性名稱爲fields。形象地:

{          // <== data 
    "result": [       // <== data.result 
     [        // <== data.result[0] 
      {       // <== data.result[0][0] 
       "type": "VOMesas.TMesas", 
       "id": 1, 
       "fields": {    // <== data.result[0][0].fields 
        "FUsers": 1, 
        "FEnclosing": 0, 
        "FClientName": "", 
        "FCode": 100, 
        "FStatus": 1, 
        "FTotalValue": 128.25 
       } 
      } 
     ] 
    ] 
} 

如果你檢索數據的一些其他的方式,它仍然是一個字符串,可以使用jQuery.parseJSON反序列化:

var data = $.parseJSON(str); 

...然後就上述訪問fields

+0

Ty,我會試試看。但只有一個問題,jQuery.parseJSON(json)收到JSON結構,對嗎?如果這是結構來自文件/ URL? – Tutch 2012-02-07 16:02:45

+0

@Tutch:我覺得沒關係。只要你提供一個格式良好的JSON字符串,parseJSON就可以正確解析它。 – 2012-02-07 16:06:12

+0

@Tutch:'jQuery.parseJSON'接受**字符串**。該字符串將包含JSON表示法中的文本。如果您從URL加載JSON,則「ajax」示例更具相關性。如果您爲獲取JSON而調用的終端服務正確(使用正確的MIME類型),jQuery將爲您反序列化它。如果MIME類型錯誤,則可以使用'dataType'選項強制它。如果您使用** [JSON-P](http://en.wikipedia.org/wiki/JSONP#JSONP)**而不是JSON,請務必告訴jQuery。 – 2012-02-07 16:06:58

1

如果你有一串JSON,只需使用JSON.parse將它變成一個Javascript對象。

var datasnap = '{"result":[[{"type":"VOMesas.TMesas","id":1,"fields": FUsers":1,"FEnclosing:0,"FClientName":"","FCode":100,"FStatus":1,"FTotalValue":128.25}}]]}'; 
var data = JSON.parse(datasnap); 
var fields = data['result'][0]['fields']; 

通過知道,但是,你已經粘貼到你的問題的JSON是無效的:

{ 
    "result": [ 
     [ 
      { 
       "type": "VOMesas.TMesas", 
       "id": 1, 
       "fields": FUsers":1,"FEnclosing: 0, //unbalanced " 
       "FClientName": "", 
       "FCode": 100, 
       "FStatus": 1, 
       "FTotalValue": 128.25 
      } 
     } //unbalanced } 
    ] 
] 
} 
+1

「result」後面有兩個括號,所以你必須使用兩個連續的數組索引,而不是一個 – devnull69 2012-02-07 16:20:38

0

第一:讓我們假設你分配你的JSON對象變量「的MyObject」。那麼你可以做

var myfields = myobject.result[0][0].fields; 
+0

JavaScript對象,而不是JSON對象。一旦它被反序列化到一個對象圖中,它就與JSON無關,這是一個*文本*符號(如源代碼)。 – 2012-02-07 16:08:02

+0

好吧我可以同意JSON只是對象的文本記號(這正是JSON字面意思)。所以這與你作爲一個人和你的名字的差異是一樣的。但我會一直打電話給你的名字,它仍然是你的反應:-) – devnull69 2012-02-07 16:18:53

0

希望這段代碼示例能幫助你理解jQuery/JSON的東西。

我已將示例JSON對象作爲數組使用。然後通過閱讀JSON的鍵/值對來填充小型HTML。

工作示例:http://jsfiddle.net/ylokesh/WC84k/