如何迭代这个json String

时间:2015-08-18 22:44:28

标签: javascript jquery json

在这个小提琴中试图迭代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))
    });
});

    }); 

4 个答案:

答案 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,因此无法迭代。