简体   繁体   English

遍历JSON格式的字符串

[英]Iterate over String of JSON Format

I am passing MongoDB Query Result in String Format to JSP Page using Ajax. 我正在使用Ajax将字符串格式的MongoDB查询结果传递给JSP页面。 I am retrieving data successfully but don't know how to Iterate over that data. 我正在成功检索数据,但不知道如何遍历该数据。

Note : JSON Structure is of Dynamic Schema given below 注意: JSON结构具有以下动态架构

Query Result in String Format 字符串格式的查询结果

[
{
   "_id":"...",
   "user":"John Doe",
   "hobbies":["1","2","3"],
   "address":{
      "city":"...",
      "state":"...",
      "country":"..."
   },
   "cell":97265xxxxx
},
{
   "_id":"...",
   "user":"John Doe",
   "hobbies":["1","2","3"],
   "cell":97265xxxxx
}
...
]

First I am converting the JSON String into JavaScript Object using jQuery parseJSON() & then I am trying to loop over the data but it is showing me undefined. 首先,我使用jQuery parseJSON()将JSON字符串转换为JavaScript对象,然后尝试遍历数据,但显示的是未定义的内容。

Here is the Code 这是代码

<button>Click Me</button><br/>
<p id="p0"></p> 
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script>
    $(document).ready(function(){
        $("button").on("click",function(){
            $.ajax({
                url:'QuizDemoServlet',
                type:'post',
                success:function(data) {

                    //JSON String is Fetched Successfully
                    $("#p0").html(data);

                    var jso = $.parseJSON(data);
                    alert("JSO " +jso.length);
                    for(var iterate=0; iterate<jso.length; iterate++){
                        $("#p1").append(iterate["user"]+"<br>");
                        $("#p2").append(iterate["hobbies"]+"<br>");
                        $("#p3").append(iterate["cell"]+"<br>");
                    }
                },
                error:function(msg){
                    alert("Error");
                    console.log(msg);
                }
            });
        });
    });
</script>

Firstly, I assume your JSON is correct. 首先,我假设您的JSON是正确的。 If so, make sure its in this form: 如果是这样,请确保其格式如下:

[
 {
   "_id":"...",
   "user":"John Doe",
   "hobbies":["1","2","3"],
   "address":{
      "city":"...",
      "state":"...",
      "country":"..."
   },
   "cell":"97265xxxxx"
 },
 {
  "_id":"...",
  "user":"John Doe",
  "hobbies":["1","2","3"],
  "cell":"97265xxxxx"
 },
......
 {

   .....
 }
]

Make sure to validate using validators such as http://jsonlint.com/ 确保使用诸如http://jsonlint.com/的验证器进行验证

Your JSON is an array of objects . 您的JSON是一个array of objects So, its as good as iterating over an array in JavaScript. 因此,它与遍历JavaScript中的数组一样好。

Lets assume variable data holds your JSON. 假设变量data保存您的JSON。

var data = JSON.parse(YOUR_JSON_STRING); // Your JSON is a `string`. We need to `parse` it to convert into JavaScript object, so that we can iterate over it.

In that case, you can do something like this: 在这种情况下,您可以执行以下操作:

  for(var obj=0;obj<data.length;obj++){
      // You get each object here.
      //obj['_id'] 
      // obj['user']
      // But since schema is dynamic, make sure the key exists before you access it

      if(data[obj].hobbies!= undefined){
          //Iterate over hobbies.
      }

      if(data[obj].address!=undefined){
          var city = data[obj].address.city;
          var state = data[obj].address.state;
          var country= data[obj].address.country;
     }
   ....and so on
  }
for(var iterate=0; iterate<jso.length; iterate++){ 
   $("#p1").append(jso[iterate].user+"<br>");
   $("#p2").append(jso[iterate].hobbies+"<br>");
   $("#p3").append(jso[iterate].cell+"<br>");
}

Works now 现在工作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM