json作为对象而不是字符串

时间:2012-03-10 13:50:46

标签: javascript json jquery jsonp

Json坐在我的localhost上:/ data /:

{
"children": [
    {
        "name": "analytics",
        "size": "1243"
    },
    {
        "name": "math",
        "size": "4343"
    },
    {
        "name": "algebra",
        "size": "1936"
    },
    {
        "name": "calc",
        "size": "3936"
    },
    {
        "name": "geom",
        "size": "2136"
    },
    {
        "name": "Quant",
        "size": "4136"
    }
]

}

以下是我尝试访问json的方法:

var interval = setInterval(function() {
        $.getJSON("http://localhost:8080/dev_tests/d3/examples/data/flare2.json", function(json) {
            $.each(json.children,function(i,name){
            alert(json.children);
            });

        });
        }, 3000);

数据很好。也就是说,当我运行 console.log(json)时,我可以在firebug中看到上面的json名称/值txt对。但是,在每个名称值对之前,我看到了单词Object。因此,例如,而不是我的日志显示{name =“analytics”,size =“1243”},..它实际上显示:[Object {name =“analytics”,size =“1243”},...是我的警报显示: [object Object] 而不是 name =“analytics”,size =“1243”。 为什么这样,有没有办法在文本中获取我的json名称/值对,以便我可以存储为javascript字符串?

非常感谢提前。

4 个答案:

答案 0 :(得分:2)

jQuery在使用jQuery.getJSON或将响应指定为JSON时会自动解码响应。如果您想要简单的回复,请改用jQuery.ajax

答案 1 :(得分:1)

JSON中的 O 代表“对象”。这是一种将JavaScript对象序列化为字符串(以及后面)的方法。您似乎一方面依赖于转换(引用children),但另一方面又不希望完成转换。如果您真的希望children成为您描述的格式的字符串集合,则应该以这种方式存储它。如果你真的想要对象表示法(并转换为客户端中的对象),那么你可以简单地使用对象的属性。

var interval = setInterval(function() {
    $.getJSON("http://localhost:8080/dev_tests/d3/examples/data/flare2.json", function(json) {
        $.each(json.children,function(i,item){
           alert("name = " + item.name + ", size = " + item.size);
        });

    });
    }, 3000);

答案 2 :(得分:0)

你所说的一切都是萤火虫和警报的正常行为。您无法提醒对象。

以下是如何在$ .get回调中循环响应的示例

http://jsfiddle.net/Y3N4S/

$.each(json.children, function(i, item){
    $('body').append('<p>Name: '+item.name+' , Size: '+item.size+'</p>')

})

答案 3 :(得分:0)

好吧,使用对象是"Javascript Object Notation"的意图。

实际上,你的json是一个对象数组。

{
  "children": [ // <-- Array
          {...},// <- Object
          {...} // <- Object
  ]
}

您可以通过以下方式访问键值对:children[0].name

for (var i=0;i< children.length; ++){
    console.log( children[i].name);
    console.log( children[i].size);
}