2012-03-10 35 views
0

JSON是坐在我的本地主机为:/数据/:JSON进来的对象不是字符串

{ 
"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”},...而且,是我的警报显示:[对象对象]而不是name =“analytics”,size =“1243”。 这是为什么,有没有办法让我的JSON名称/值对在文本中,以便我可以存储为JavaScript字符串?

非常感谢提前。

回答

1

O在JSON中代表“对象”。这是一种将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); 
+0

Ahhhhhhh!我明白......就是这样。最后。我无法得到这个描述(obj to str)来点击。非常感谢你做的这些!! – Chris 2012-03-10 14:09:48

2

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

+0

其实,jQuery.getJSON是Ajax调用的简写。查看ajax方法的jQuery.getJSON页面。 – 2012-03-10 13:56:08

+0

@JessevanAssen不完全是'$ .getJSON'隐式设置'dataType:json',与'$ .ajax'一样,您可以灵活地将'dataType'指定为'text'等。 – Rafay 2012-03-10 13:59:05

+1

不,我的意思是'jQuery.getJSON'实际上调用了带有一些默认参数的'jQuery.ajax'方法,如[jQuery.getJSON](http://api.jquery.com/jQuery.getJSON/)页面所示。 – 2012-03-10 14:14:23

0

你所说的一切都是萤火虫和警报的正常行为。你不能提醒一个对象。

这里的例子你的$不用彷徨回调

http://jsfiddle.net/Y3N4S/

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

}) 
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); 
}