使用jquery在json中读取对象

时间:2014-02-04 11:10:09

标签: javascript jquery json remoteobject

我在遥控器下面的json下面。

{

    "name":"planning Diet",
    "day1":{
        "morning":"chicken",
        "evening":"mutton",
        "night":"Juice"
    },
    "day2":{
        "morning":"burger",
        "evening":"pizza",
        "night":"Juice",
        "late night":"water"
    }

}

以下是我的尝试。

$.getJSON("http://domain.com/hello.json",function(result){
  $.each(result, function(i, field)
{
console.log(field);
});

返回类似

的内容
"planning diet"
[object object]
[object object]

现在我如何遍历或遍历所有对象......?

6 个答案:

答案 0 :(得分:2)

在你的情况下,你可以使用这样的东西,

$.getJSON("http://domain.com/hello.json", function(result) {
    $.each(result, function(i, field) {
        if (typeof field == "object") {
            console.log(i);  
            $.each(field, function(i, f) {
                console.log(f);
            });
        }
        else {
            console.log(field);
        }
    });
});

您可以使用typeof field == "object"检查当前项目是否为对象

答案 1 :(得分:1)

您需要一个具有递归循环的函数,如下所示:

function getValues(obj) {
    if(typeof obj== "object") {
        $.each(obj, function(key,value) {
            getValues(value);
        });
    }
    else {
       console.log(obj);
    } 
}

这里你基本上是这样做的:

1) Iterate over the json item, check if item is an object. 
2) If so,iterate over this new object, else print the value. 
3) This goes on till all the values are printed and whole json structure is iterated.

函数的参数应该是从远程位置获得的json。

答案 2 :(得分:0)

var traverse = function(result){
    $.each(result, function(i, field) {
        if ($.isPlainObject(field)) {
            traverse(field);
        } else {
            console.log(field);
        }
    });
}
$.getJSON("http://domain.com/hello.json", traverse);

答案 3 :(得分:0)

function traverse(obj){
   for(prop in obj){
       if(typeof obj[prop] === "object"){
           traverse(obj[prop]);
       }else{
          console.log(obj[prop]);
       }
   }
}

JS小提琴: http://jsfiddle.net/Rbs9A/

答案 4 :(得分:0)

只有当你有$.each()个多个对象数组时才需要使用[{},{},{}...]循环,但在你的情况下,你只需要一个包含另一个对象的对象,所以你不需要做任何事情迭代循环。您可以参考其keys

$.getJSON("http://domain.com/hello.json",function(result){
   console.log(result); // gives you your object
   console.log(result.name); // gives you you "planning Diet"

   console.log(result.day1.morning); // gives you you "chicken"
});

答案 5 :(得分:0)

试试这个, field.day1.morning

data=[{

    "name":"planning Diet",
    "day1":{
        "morning":"chicken",
        "evening":"mutton",
        "night":"Juice"
    },
    "day2":{
        "morning":"burger",
        "evening":"pizza",
        "night":"Juice",
        "late night":"water"
    }

}]
$.each(data, function(i, field){
alert(field.day1.morning)
})

演示http://jsfiddle.net/Aj9eJ/