2011-08-30 50 views
1

我將字符串數組轉換爲JSON。它看起來像Javascript - 迭代無鍵JSON

var data = ["[None]","data","data2"]

所以,沒有鍵/值對。這使我的JSON迭代炸彈:

 for (var i = 0; i < data.length; i++) { 
          var obj = data[i]; 
          alert(obj); 
          for (var key in obj) { 
           var attrName = key; 
           var attrValue = obj[key]; 
           alert('key: ' + attrName + 'value: ' + attrValue); 
          } 

        } 

我應該想出一個辦法來鍵(一個字符串數組創建這個JSON javascriptserializer)每個對象?或者..你有什麼建議?


從你們那裏學到了一些東西后,我仍然無法迭代數據對象。

for (var i = 0; i < data.length; i++) { 
           var obj = data[i]; 
           alert(typeof obj); 
           if (typeof obj === 'object') { 
            alert(obj); 
            for (var key in obj) { 
             var attrName = key; 
             var attrValue = obj[key]; 
             alert('key: ' + attrName + 'value: ' + attrValue); 
            } 
           } 
           else { 
            alert(data[i]); 
           } 
          } 

我打了else,但它一次只檢查數組1個字符。這不是我想要的...

+1

是什麼'data',什麼是'obj'? –

+0

@Daniel A. White - 'data'定義如上,尋找「它看起來像......」,那就是JSON。在OP中聲明並完全初始化'obj'。 –

+2

這只是一個數組,而不是JSON。 –

回答

3

因爲它僅僅是一個數組:

var data = ["[None]","data","data2"] 
for(var x=0;x<data.length;x++) { 
    alert(data[x]) 
} 
+0

在視覺上這些是相同的,但Javascript將我的數據對象視爲'string'類型。這裏的對象被視爲typeof「object」。所以它不會翻譯。 –

+0

+1這最終讓我到正確的地方。我不得不在我的jQuery'$ .get()'請求中添加'json'。然後我的返回被視爲對象而不是字符串並且正確迭代。 –

+0

一個對象用{}實例化,而不是[] –

4

看來你有通用的json打印機。通常,當從服務器獲取json時,你在客戶端上做的事情是在知道json是什麼樣子的情況下實現的。所以它有點奇怪,你試圖迭代,就好像數組包含簡單字符串時的對象字面值。

這就是說你可以添加一個測試來查看obj是否真的是一個對象。

if (typeof obj === 'object') { 
    // now iterate key/vals 
} 

並且只有在您的obj實際上是一個對象時纔會迭代值。

+0

請記住,我說.NET類(javascriptserializer)從字符串數組中創建了這個。方法定義爲「將對象轉換爲JSON字符串」。所以你們都告訴我MSDN文檔是錯誤的。這可以。我只需要知道如何將它變成「真正的JSON」。 –

+0

我從來沒有說過。一串字符串是完全有效的json。 – hvgotcodes

+0

我的錯誤 - @Diodeus說「不是JSON」。你是對的。 –