在这个小提琴中试图迭代json String:
http://jsfiddle.net/sfbanvv6/2/
但是接受例外:
Uncaught SyntaxError: Unexpected token e
JSON有效吗?那么我的迭代方式有些不正确吗?
小提琴代码:
javascript :
jQuery(document).ready(function() {
var jsonString2 = '{ "header": "test1", "children": [ { "date": "2015-01-02", "count": "36" }, { "date": "2015-01-03", "count": "29" } ] }'
var data2 = []
var combinedHeights2=[]
var myData2 = JSON.parse(jsonString2);
$.each(myData2, function(i, obj) {
console.log($.parseJSON(obj))
$.each(obj.children, function(i2, obj2) {
console.log('here')
var d = new Date(obj2.date)
console.log(Date.parse(d))
// data2.push([Date.parse(d), parseInt(obj.count)])
// combinedHeights2.push(parseInt(obj.count))
});
});
});
答案 0 :(得分:1)
$.parseJSON(obj)
正试图解析已经解析过的东西。 JSON解析器不仅解析顶层并将内部JSON保留为JSON,它们返回整个嵌套的数组和对象集。因此,您的错误可能是由您的日志记录代码引起的。
治愈是要认识到obj
不需要任何解析,你可以直接使用它。
更具体地说,这段代码可以满足您的需求:
var jsonString2 = '{ "header": "test1", "children": [
{ "date": "2015-01-02", "count": "36" },
{ "date": "2015-01-03", "count": "29" }
] }';
var data2 = [];
var combinedHeights2 = [];
var myData2 = JSON.parse(jsonString2);
console.log(myData2);
$.each(myData2.children, function(i, obj) {
console.log(obj);
var d = new Date(obj.date);
console.log(Date.parse(d));
});
特别要注意记录时myData2
的样子。您需要在myData2.children
中使用each
,而不是myData2
。
P.S。得到一些分号!
答案 1 :(得分:0)
obj.children未定义。这是工作的
var myData2 = JSON.parse(jsonString2);
$.each(myData2, function(i, obj) {
var t = myData2.children;
$.each(t, function(i2, obj2) {
console.log(obj2);
//var d = new Date(obj2.date);
//console.log(Date.parse(d));
// data2.push([Date.parse(d), parseInt(obj.count)])
// combinedHeights2.push(parseInt(obj.count))
});
});
但这是一个更好的版本,只能获得日期
$.each(myData2.children, function(i, obj) {
var t = this;
console.log(t.date);
var d = new Date(t.date);
});
});
答案 2 :(得分:0)
使用chrome logging formats,您可以通过将日志记录语句更改为更清楚地看到您正在迭代的内容;
$.each(myData2, function(i, obj) {
console.log('%s %O', i, obj);
});
您的第一个obj
是循环header = 'test1'
中的属性,没有children
属性。第二个是children = [ ]
,这是你的数组。
要迭代数组,只需使用;
$.each(myData2.children, function(i, obj) {
var d = new Date(obj.date)
}
答案 3 :(得分:0)
如果您尝试迭代Json的children属性,那么您可以这样做:
jQuery(document).ready(function() {
var jsonString2 = '{ "header": "test1", "children": [ { "date": "2015-01-02", "count": "36" }, { "date": "2015-01-03", "count": "29" } ] }'
var myData2 = JSON.parse(jsonString2);
$.each(myData2.children, function(i, obj) {
console.log(obj);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
你得到了异常,因为你的代码试图迭代你的“header”参数,该参数包含一个String,因此无法迭代。