如何迭代JSON结构?

Flu*_*dan 485 javascript json loops

我有以下JSON结构:

[{ "id":"10", "class": "child-of-9" }, { "id": "11", "classd": "child-of-10" }]
Run Code Online (Sandbox Code Playgroud)

如何使用jQuery或JavaScript迭代它?

You*_*Ken 495

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:for-in方法对于简单对象来说很酷.使用DOM对象不是很聪明.

  • 不要忘记在你的`obq`循环中检查`obj.hasOwnProperty(key)`---否则有一天你可能会发现其他键进入你不想要的`obj`,如果有人扩展原型,例如...... (7认同)
  • 但是arr不是JSON. (2认同)

Mar*_*ang 431

取自jQuery文档:

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));
});
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常混乱的语法.你能解释一下吗?你还能提供输出吗? (150认同)
  • 答案应该是用JavaScript而不是JQuery给出的. (118认同)
  • @WayneHartman我同情你的观点,但最初的问题确实说"jquery或javascript".似乎错误是在问题上没有jquery标记. (21认同)
  • OP要求使用jQuery或JavaScript,因此答案很适合我的书。 (3认同)

Ali*_*aka 81

使用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>
Run Code Online (Sandbox Code Playgroud)

将导致:

Susita
BMW
Run Code Online (Sandbox Code Playgroud)

  • Susita是一个文化因变量,对吧?:-) (7认同)
  • 这是一个常规数组,而不是JSON. (5认同)
  • 对,顶级变量,如宝马;-) (2认同)

abd*_*sit 59

如果不容易,请告诉我:

var jsonObject = {
  name: 'Amit Kumar',
  Age: '27'
};

for (var prop in jsonObject) {
  alert("Key:" + prop);
  alert("Value:" + jsonObject[prop]);
}
Run Code Online (Sandbox Code Playgroud)

  • 您的jsonObject不是真正的JSON对象.这是一个javascript对象.这就是为什么这样的原因.但是,如果任何人拥有JSON对象,他可以将其转换为JS对象,然后使用您的方法.要将JSON对象转换为JS对象,请使用jsObject = JSON.parse(jsonObject); (19认同)

Swa*_*mbe 38

如果这是你的dataArray:

var dataArray = [{"id":28,"class":"Sweden"}, {"id":56,"class":"USA"}, {"id":89,"class":"England"}];
Run Code Online (Sandbox Code Playgroud)

然后:

$(jQuery.parseJSON(JSON.stringify(dataArray))).each(function() {  
         var ID = this.id;
         var CLASS = this.class;
});
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 16

mootools例子:

var ret = JSON.decode(jsonstr);

ret.each(function(item){
    alert(item.id+'_'+item.classd);
});
Run Code Online (Sandbox Code Playgroud)


Ger*_*ink 15

http://www.w3schools.com复制并粘贴,不需要JQuery开销.

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

var text = "";
var x;
for (x in person) {
    text += person[x];
}
Run Code Online (Sandbox Code Playgroud)

结果:John Doe 25


Mat*_*yer 10

您可以使用像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()
Run Code Online (Sandbox Code Playgroud)

有更多"插件"可供您处理此类数据,请参阅http://code.google.com/p/objx-plugins/wiki/PluginLibrary


Fat*_*hra 10

对于嵌套对象,可以通过递归函数进行检索:

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

事件是json对象的地方.


kar*_*rto 9

这是一个纯注释的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
Run Code Online (Sandbox Code Playgroud)


Fab*_*ert 9

使用jQuery时,Marquis Wang可能是最好的答案.

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

简单易行:

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

results.forEach( function( item ) {
    console.log( item );
    });
</script>
Run Code Online (Sandbox Code Playgroud)


Ghi*_*rny 5

另一个浏览 JSON 文档的解决方案是JSONiq(在Zorba引擎中实现),您可以在其中编写如下内容:

jsoniq version "1.0";

let $doc := [
  {"id":"10", "class": "child-of-9"},
  {"id":"11", "class": "child-of-10"}
]
for $entry in members($doc)             (: binds $entry to each object in turn :)
return $entry.class                     (: gets the value associated with "class" :)
Run Code Online (Sandbox Code Playgroud)

您可以在http://try.zorba.io/上运行它


小智 5

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);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 你应该解释你的代码。没有解释的答案没有多大帮助。 (3认同)