2009-07-03 143 views
386

我有以下JSON结构:如何迭代JSON结构?

[{ "id":"10", "class": "child-of-9" }, { "id": "11", "classd": "child-of-10" }] 

如何遍历使用jQuery或JavaScript呢?

+0

http://stackoverflow.com/questions/1050674/fastest-way-to-iterate-through-json-string-in-javascript – Max 2009-07-03 07:11:57

+5

“jQuery的或javascript” ? jquery是用javascript编写的! – 2014-08-28 12:09:13

+6

它应该是“jQuery或纯JavaScript”。 – rsb2097 2015-09-17 11:16:41

回答

370

jQuery docs摘自:

var arr = [ "one", "two", "three", "four", "five" ]; 
var obj = { one:1, two:2, three:3, four:4, five:5 }; 

jQuery.each(arr, function() { 
    $("#" + this).text("My id is " + this + "."); 
    return (this != "four"); // will stop running to skip "five" 
}); 

jQuery.each(obj, function(i, val) { 
    $("#" + i).append(document.createTextNode(" - " + val)); 
}); 
+129

这是一个非常混乱的语法。你能解释一下吗?你还可以提供输出吗? – 2011-06-23 17:10:54

+82

答案应该在JavaScript中给出,而不是JQuery。 – 2013-05-31 03:10:51

+18

@WayneHartman我同情你的观点,但原来的问题确实会说“jquery或javascript”。似乎错误是没有在问题上的jQuery标签。 – vlasits 2014-01-13 18:39:47

12

MooTools的例子:

var ret = JSON.decode(jsonstr); 

ret.each(function(item){ 
    alert(item.id+'_'+item.classd); 
}); 
9

您可以使用一个小型图书馆像物objx - http://objx.googlecode.com/

这样

您可以编写代码:

var data = [ {"id":"10", "class": "child-of-9"}, 
       {"id":"11", "class": "child-of-10"}]; 

// alert all IDs 
objx(data).each(function(item) { alert(item.id) }); 

// get all IDs into a new array 
var ids = objx(data).collect("id").obj(); 

// group by class 
var grouped = objx(data).group(function(item){ return item.class; }).obj() 

还有更多的“插件”可以让你处理这样的数据,请参见http://code.google.com/p/objx-plugins/wiki/PluginLibrary

446
var arr = [ {"id":"10", "class": "child-of-9"}, {"id":"11", "classd": "child-of-10"}]; 

for (var i = 0; i < arr.length; i++){ 
    var obj = arr[i]; 
    for (var key in obj){ 
     var attrName = key; 
     var attrValue = obj[key]; 
    } 
} 

var arr = [ {"id":"10", "class": "child-of-9"}, {"id":"11", "class": "child-of-10"}]; 
 
    
 
for (var i = 0; i < arr.length; i++){ 
 
    document.write("<br><br>array index: " + i); 
 
    var obj = arr[i]; 
 
    for (var key in obj){ 
 
    var value = obj[key]; 
 
    document.write("<br> - " + key + ": " + value); 
 
    } 
 
}

注:该换的方法是凉的简单对象。与DOM对象一起使用不太聪明。

68

使用的foreach

<html> 
<body> 
<script type="text/javascript"> 
var mycars = [{name:'Susita'}, {name:'BMW'}]; 
for (i in mycars) 
{ 
    document.write(mycars[i].name + "<br />"); 
} 
</script> 
</body> 
</html> 

会导致:

Susita 
BMW 
3

另一种解决方案通过JSON文件进行浏览JSONiq(在Zorba引擎实现),在那里你可以写类似:

let $json := [ {"id":"10", "class": "child-of-9"}, 
       {"id":"11", "class": "child-of-10"} ] 
for $entry in jn:members($json)  (: binds $entry to each object in turn :) 
return $entry("class")    (: gets the value associated with "class" :) 

您可以在http://www.zorba-xquery.com/html/demo#AwsGMHmzDgRpkFpv8qdvMjWLvvE=

35

运行它,如果这是您dataArray

var dataArray = [{"id":28,"class":"Sweden"}, {"id":56,"class":"USA"}, {"id":89,"class":"England"}]; 

则:

$(jQuery.parseJSON(JSON.stringify(dataArray))).each(function() { 
     var ID = this.id; 
     var CLASS = this.class; 
}); 
7

随着嵌套的对象,可以检索由递归函数:

function inside(events) 
    { 
    for (i in events) { 
     if (typeof events[i] === 'object') 
     inside(events[i]); 
     else 
     alert(events[i]); 
    } 
    } 
    inside(events); 

作为事件是json对象。

8

这是一个纯粹评论的JavaScript示例。

<script language="JavaScript" type="text/javascript"> 
    function iterate_json(){ 
      // Create our XMLHttpRequest object 
      var hr = new XMLHttpRequest(); 
      // Create some variables we need to send to our PHP file 
      hr.open("GET", "json-note.php", true);//this is your php file containing json 

      hr.setRequestHeader("Content-type", "application/json", true); 
      // Access the onreadystatechange event for the XMLHttpRequest object 
      hr.onreadystatechange = function() { 
       if(hr.readyState == 4 && hr.status == 200) { 
        var data = JSON.parse(hr.responseText); 
        var results = document.getElementById("myDiv");//myDiv is the div id 
        for (var obj in data){ 
        results.innerHTML += data[obj].id+ "is"+data[obj].class + "<br/>"; 
        } 
       } 
      } 

      hr.send(null); 
     } 
</script> 
<script language="JavaScript" type="text/javascript">iterate_json();</script>// call function here 
7

Marquis Wang's很可能是使用jQuery时的最佳答案。

这里的东西在纯JavaScript中非常相似,使用JavaScript的forEach方法。 forEach以函数作为参数。然后将为该数组中的每个项目调用该函数,并将该项目作为参数。

短,操作简便:

<script> 
var results = [ {"id":"10", "class": "child-of-9"}, {"id":"11", "classd": "child-of-10"}]; 

results.forEach(function(item) { 
    console.log(item); 
    }); 
</script> 
46

请让我知道,如果它是不容易的:

var jsonObject = { 
     name: 'Amit Kumar', 
     Age: '27' 
    }; 
    for (var prop in jsonObject) { 
     alert("Key:" + prop); 
     alert("Value:" + jsonObject[prop]); 
    } 
1
var jsonString = "{\"schema\": {\"title\": \"User Feedback\", \"description\":\"so\", \"type\":\"object\", \"properties\":{\"name\":{\"type\":\"string\"}}}," + 
         "\"options\":{ \"form\":{\"attributes\":{}, \"buttons\":{ \"submit\":{ \"title\":\"It\", \"click\":\"function(){alert('hello');}\" }}} }}"; 
var jsonData = JSON.parse(jsonString); 

function Iterate(data) 
{ 
    jQuery.each(data, function (index, value) { 
     if (typeof value == 'object') { 
      alert("Object " + index); 
      Iterate(value); 
     } 
     else { 
      alert(index + " : " + value); 
     } 
    }); 

}; 

Iterate(jsonData); 
10

复制和http://www.w3schools.com粘贴,没有必要对JQuery的开销。

var person = {fname:"John", lname:"Doe", age:25}; 

var text = ""; 
var x; 
for (x in person) { 
    text += person[x]; 
} 

结果:李四25