2012-02-09 134 views
29

編輯:我已經得到了這個問題的「着名問題」徽章,所以我想我會回到它並堅持發生在我身上發生在我身上的事情,在人們搜索它得到一個答案馬上。jQuery.getJSON和jQuery.parseJSON返回[object Object]?

基本上,我是JSON的新手。 JSON是一個對象(顯然),因爲它包含各種各樣的東西!所以我就像「嘿,JavaScript,只是彈出一個警告,所有這些JSON數據」,期待它給我JSON數據作爲一個字符串。但是JavaScript不這樣做(這很好!),所以它就像「嘿,這是我們如何顯示對象,[對象對象]」。

我可以做的事情就像alert(obj.DATA[0][1]),它會告訴我那個對象。

我真正想要的是驗證我正在製作好的JSON數據,我可以用JSON.stringify進行檢查。

無論如何,回到我們定期排定的問題!


我想用ajax調用一些JSON數據,但jQuery似乎不喜歡我的JSON。

,如果我這樣做:

function init2() { 
    alert("inside init2"); 
    jQuery.ajax({ 
     url: "/Mobile_ReportingChain.cfm", 
     type: "POST", 
     async: false, 
     success: function (data) { 
      alert(data); 
      var obj = jQuery.parseJSON(data); 
      alert(obj); 
     } 
    }); 
} 

我得到這個從警報(數據):

{"COLUMNS":["MFIRST_NAME","MLAST_NAME","MMDDL_NAME","MEMPLY_ID","MAIM_NBR","EMPLY_ID"], 
    "DATA":[ 

["FNAME1   ","LNAME1     ","MI1    ","000-14-7189","026-0010","000-62-7276"]  

,["FNAME2   ","LNAME2     ","MI2    ","000-01-2302","101-1850","000-14-7189"] 

,["FNAME3   ","LNAME3     ","MI3    ","000-91-3619","102-1000","000-01-2302"]  

,["FNAME4   ","LNAME4     ","MI4    ","000-25-9687","102-1000","000-91-3619"] 

]} 

這JSONLint說是有效的JSON。警報(OBJ)給了我這一點,但是:

[object Object] 

加入dataType: "json""text json"只是使它在alert(data)報告[object Object]

我真的很想弄明白,有誰知道它爲什麼這樣做?我在jQuery上很新,我的目標是爲每個列獲取一個數組。我使用的相同代碼在不同的頁面上工作,這是最令我困擾的。

+1

您將其轉換爲一個對象,然後調用與該對象的警報。然後它說這是一個對象。一切正常,因爲它應該:) – 2012-02-09 21:22:00

回答

32

alert()函數只能顯示一串文字。作爲唯一的參數,它需要一個字符串或一個對象。 然而,該對象將被轉換爲可以顯示的字符串。

通過jQuery獲取JSON時,$.ajax()方法會自動解析JSON並將其轉換爲JavaScript對象。你的data變量是一個JavaScript對象,而不是人們所期望的JSON字符串。

由於alert()只能顯示字符串,當試圖提醒您的data對象時,您的對象將變成其字符串表示形式。 JavaScript對象的字符串表示形式爲[object Object]

爲了調試目的,您可以改用console.log(data)。然後,您可以通過瀏覽器開發工具中的控制檯檢查對象及其內容。

function init2() { 
    jQuery.ajax({ 
     url: "/Mobile_ReportingChain.cfm", 
     type: "POST", 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      console.log(data); 
     } 
    }); 
} 

如果你因爲某些原因還是想提醒JSON數據,那麼你就必須把你的data對象回一個JSON字符串。要做到這一點,你可以做的JSON.stringify使用:

alert(JSON.stringify(data)); 
+0

這很快,我感到很傻。謝謝大家,你是最快的,並給了我console.log(數據)的信息,所以你贏得了答案! – Rob 2012-02-09 21:24:58

+1

@Rob我們每天都會學到新的東西! – 2012-02-09 21:26:12

+0

搜索1000個解決方案後,此workede!謝謝! – Nopzen 2013-11-12 17:53:32

2

這是它是如何工作的。你的JSON成爲一個javascript對象。然後,您可以將該對象作爲常規JavaScript對象進行操作。

data.COLUMNS例如應該返回一個數組。

10

它想要的字符串

var obj = $.parseJSON(JSON.stringify(data)); 
+0

這幫了我一個單獨的問題。謝謝! :D – 2014-11-17 01:41:16

2

[object Object]是javascript對象的字符串表示。

嘗試訪問對象的屬性。

alert(data.COLUMNS[0]); 
4

嘗試將該對象發送到console.log。你會得到一個更清晰的畫面,它包含了什麼。

另外,把dataType: 'json'和刪除parseJSON,因爲它都是一樣的。

+0

是的,一旦我知道我正確得到了JSON,我用$ .getJSON替換了它。 – Rob 2012-02-10 14:47:19

2

jQuery.parseJSON會將json字符串轉換爲json對象,所以alert(obj)會顯示[object Object],因爲它是一個對象。

如果您想查看obj包含的內容,請使用console.log(obj)然後檢查控制檯日誌消息。

0

$.getJSON("UI/entidades.json.php", function(data){ 
 
\t result = JSON.stringify(data); 
 
\t alert(result) 
 
\t console.log(result) 
 
})

相關問題