2013-03-13 129 views
3

我有一个JSON数组在javascript中的Ajax响应。如何从JSON数组获取集合

[{"id":1,"text":"apple"},{"id":2,"text":"mango"},{"id":3,"text":"banana"}] 

我想提取的ids一个逗号分隔的列表像"1, 2, 3"从这个JSON响应。我怎样才能做到这一点?

+0

你尝试过什么然而?为什么它不起作用?你是否得到任何错误等... – epoch 2013-03-13 13:21:24

+1

我没有任何想法做到这一点。 – 2013-03-13 13:22:20

回答

3

首先,你解析JSON(如果你不这样做的话):

var arr = JSON.parse('[{"id":1,"text":"apple"},{"id":2,"text":"mango"},{"id":3,"text":"banana"}]'); 

然后循环数组以提取每个对象上的id。您可以使用数组循环的map方法和IDS一气呵成添加到一个新的数组:

var ids = arr.map(function(item) { 
    return item.id; 
}); 
alert(ids.join(',')); 
+0

谢谢,它工作:) – 2013-03-14 05:51:42

1

假设你的JSON是作为字符串存储jsonstr在您的JS代码:

/*parse the JSON to a JS object*/ 
var data = JSON.parse(jsonstr); 
var ids = []; 

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

    //loop over the array and if the id is defined add it 
    if(typeof data[i].id !== "undefined"){ 
     ids.push(data[i].id); 
    } 
} 
+0

@bfavaretto很好的问题。不喜欢评论显然 – 2013-03-13 13:37:09

+0

@bfavaretto去为它。我只是尝试了大约5种不同的东西,即使在自己的行上使用/ ** /,也会打破后面的代码。 – 2013-03-13 13:42:59

+0

我刚刚在meta上发布了一个关于它的问题:http://meta.stackexchange.com/questions/171669/syntax-highlighter-failing-for-specific-code-block – bfavaretto 2013-03-13 13:50:07

0
var a = [{ 
    "id": 1, 
    "text": "apple" 
}, { 
    "id": 2, 
    "text": "mango" 
}, { 
    "id": 3, 
    "text": "banana" 
}]; 
var ar = []; 
for (var i = 0; i < a.length; i++) { 
    ar.push(a[i].id); 
} 

alert(ar.join(',')) 

http://jsfiddle.net/t3w5S/1/

+0

那不是你定义的JSON字符串,它是一个JavaScript对象。 – 2013-03-13 13:25:35

+2

@ ben336:纠正我,如果我错了,原来的海报已经表示他有“一个JSON数组”,我解释为解析JSON阵列形式已经 – Thalaivar 2013-03-13 13:31:25

+0

但他的所有属性都被双引号。看起来更像是一个JSON字符串。它总是有可能让他感到困惑,但是他说他有JSON,而且它的格式与它的JSON格式一样,所以我认为没有太多理由认为它不是JSON – 2013-03-13 13:36:17

-1

关于这一点:

x = [{"id":1,"text":"apple"},{"id":2,"text":"mango"},{"id":3,"text":"banana"}]; 
str = ""; 
for(i=0;i<x.length;i++) 
{ 
    str += x[i].id.toString() + ','; 
} 
str = str.substring(0, str.length - 1); 
console.log(str); 
+0

不用“var”定义变量。假设存在“id”。当它已经集中在两个字符串周围时,不必要地调用toString。如果任何一个“id”未定义,它将不会有toString方法,并且此代码段将会出错。原始海报表示他们希望它以逗号和空格集中。我看不到空间。当一个简单的数组和连接可以做到这一点时,也可以使用过于复杂的可疑子字符串方法来修剪最后一个字符。最后假设当原始海报提到需要解析的JSON时,响应已经是一个数组。 – Ultimater 2013-03-13 13:53:26