gpt4 book ai didi

javascript - d3.js 无法解析 json 数据

转载 作者:行者123 更新时间:2023-11-28 02:27:31 24 4
gpt4 key购买 nike

我有一个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;
});

显示错误“Uncaught TypeError: Object # has no method 'forEach'”但是将json数据修改为

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

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

最佳答案

如果您想处理这两种数据格式,最直接的方法是检查 data.StoreVisitGraphCount.listArray 还是对象。从问题中得到治愈:How to check if a JSON response element is an array? ,最可靠的方法是:

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 运行服务),请考虑将其更改为一致并在每种情况下返回一个列表。

关于javascript - d3.js 无法解析 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com