2012-02-13 70 views
-2

JSON字符串:的JavaScript:迭代JSON字符串

'["Colour","Audio","Effect"]' 

我在通过这个迭代的问题,虽然这是一个简单的解决方案。我曾尝试过:

for (var o in obj) { } // iterates through each individual character of the json object 

for (var i = 0; i < obj.length; i++) { } // same as above 

$.each(obj, function(i, v) { }); // same as above 

我在这里没有看到什么。所以希望有人能找出问题所在。

+5

这是一个简单的'array',不'json'。 – gdoron 2012-02-13 17:35:10

+0

这是一个字符串。请注意,我没有将它实例化为一个数组。下次请理解代码。 – 2012-02-13 17:41:43

+0

@BrianGraham:当然你明白在发布JavaScript和JSON结构之间可能会有歧义。如果你通过调用它像*服务器端的JSON标记*那么显式是有帮助的。 – 2012-02-13 17:44:55

回答

4

首先,解析JSON字符串:

var jsonStr = '["Colour","Audio","Effect"]'; 
var obj = JSON.parse(jsonStr); 

// Alternatively, write out the JSON directly 
// var obj = ["Colour","Audio","Effect"]; 

然后,要么

for (var i = 0; i < obj.length; i++) { } 

$.each(obj, function(i, v) { }); 

for (var o in obj) { }遍历数组的原始属性,包括length,并且不适合迭代数组。

+0

它不是json字符串,它是一个字符串数组。 – gdoron 2012-02-13 17:37:16

+1

@gdoron如果第一个代码块是所述字符串的表示而不是JavaScript代码,则它可能是JSON字符串。请注意我是如何在这个答案的第一行中定义它的。 – phihag 2012-02-13 17:39:17

+0

@ PHPhag谢谢,我知道这将是一件简单的事情。 – 2012-02-13 17:42:04

1

你只需要声明你的OBJ变量:

var obj = ["Colour","Audio","Effect"]; 

for (var i = 0; i < obj.length; i++) { 
    alert(obj[i]); 
} 
1

您需要解析JSON字符串才能使用它。

["Colour","Audio","Effect"]是一个数组,'["Colour","Audio","Effect"]'是一个字符串。

您需要使用JSON.parse('["Colour","Audio","Effect"]')(或$.parseJSON)将JSON字符串转换为可用的JavaScript数组。

var obj = '["Colour","Audio","Effect"]'; 
$.each(obj, function(i, v) { 
    console.log(v); // prints each letter 
}); 

var obj = ["Colour","Audio","Effect"]; // or $.parseJSON('["Colour","Audio","Effect"]') 
$.each(obj, function(i, v) { 
    console.log(v); // prints each element 
});