繁体   English   中英

d3.js无法解析json数据

[英]d3.js not able to parse json data

我有一个json数据,并尝试使用d3.json函数进行解析。数据的格式如下。

{
"StoreVisitGraphCount": {
    "list": {
        "count": 23,
        "date": "01-2013"
    },
    "parameters": {
        "format": "m-Y",
        "point": 10,
        "type": "mo"
    }
   }
}

我正在尝试使用以下功能解析它

d3.json("http://localhost:8080/data-  services/rest/storeVisitsGraph/20120101,20131231,-1", function(error, data) {
data.StoreVisitGraphCount.list.forEach(function(d) {
d.date = parseDate(d.date);
d.count = +d.count;
});

其显示错误,提示“未捕获的TypeError:对象#没有方法'forEach'”,但将json数据修改为

 {
"StoreVisitGraphCount": {
    "list": [{
        "count": 23,
        "date": "01-2013"
    }],
    "parameters": {
        "format": "m-Y",
        "point": 10,
        "type": "mo"
    }
   }
}

使列表成为数组..它成功地解析,没有显示错误..当列表数组中只有一个数据时,其余的像第一种格式一样创建json,但是当列表数据不止一个时,它像第二种格式一样创建json ...如何解决或编写d3.js中的函数,以便它也可以解析第一种格式...

如果要同时处理两种数据格式,最直接的方法是检查data.StoreVisitGraphCount.listArray还是Object 解决以下问题: 如何检查JSON响应元素是否为数组? ,最可靠的方法是:

function isArray(what) {
    return Object.prototype.toString.call(what) === '[object Array]';
}

然后您的代码将显示为:

d3.json(..., function(error, data) {
  if (!isArray(data.StoreVisitGraphCount.list)) {
    data.StoreVisitGraphCount.list = [ data.StoreVisitGraphCount.list ];
  }

  data.StoreVisitGraphCount.list.forEach(function(d) {
    d.date = parseDate(d.date);
    d.count = +d.count;
  });
});

但是,这不是一个非常一致的API设计。 如果该API在您的控制中(您正在从localhost运行该服务),请考虑将其更改为一致的,并在每种情况下均返回一个列表。

第一种格式实际上并不包含列表,而是对象哈希。 您需要按以下方式修改代码才能使用它。

d3.json(..., function(error, data) {
  data.StoreVisitGraphCount.list.date = parseDate(data.StoreVisitGraphCount.list.date);
  data.StoreVisitGraphCount.list.count = +data.StoreVisitGraphCount.list.count;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM