2011-08-30 51 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”。你是对的。 –