Javascript d3.json无法解析';无穷大';价值

Javascript d3.json无法解析';无穷大';价值,javascript,json,d3.js,Javascript,Json,D3.js,我试图读取sqlite db数据,并将其作为json数据提供给d3以构建一个图形。我可以轻松地读取json格式的数据,例如这个URL 返回以下数据: [ ["2019-03-13 08:59:42.445199", 20.0, -93150.3125, -1128635.625], ["2019-03-13 09:00:18.670074", 21.0, -116238.2734375, -Infinity], ["2019-03-13 09:00:54.897829", 2

我试图读取sqlite db数据,并将其作为json数据提供给d3以构建一个图形。我可以轻松地读取json格式的数据,例如这个URL

返回以下数据:

[
   ["2019-03-13 08:59:42.445199", 20.0, -93150.3125, -1128635.625],
   ["2019-03-13 09:00:18.670074", 21.0, -116238.2734375, -Infinity],
   ["2019-03-13 09:00:54.897829", 21.0, -111895.09375, -1916368.5],
   ["2019-03-13 09:01:31.063545", 21.0, -116290.6484375, -1332886.0],
   ["2019-03-13 09:02:07.244134", 21.0, -99264.3828125, -Infinity],
   ["2019-03-13 09:02:43.424961", 21.0, -109359.6953125, -1090349.25],
   ["2019-03-13 09:03:19.621574", 21.0, -114976.4375, -3437984.0],
   ["2019-03-13 09:03:55.800267", 21.0, -97664.5078125, -1667308.5],
   ["2019-03-13 09:04:31.995798", 21.0, -102451.046875, -Infinity],
   ["2019-03-13 09:05:08.172229", 21.0, -109326.34375, -3360548.75],
   ["2019-03-13 09:05:44.367397", 21.0, -110630.9140625, -732758.8125],
   ["2019-03-13 09:06:20.576101", 21.0, -110025.140625, -926976.3125],
   ["2019-03-13 09:06:56.771144", 21.0, -116129.8984375, -Infinity]
]
现在,当使用d3.json函数读取相同的数据时,我遇到了“无穷大”值的问题:

jsondata = d3.json("http://localhost:8085/SQLQuery/?date1=" + date1 + "&date2=" + date2 + "&radio=" + wradio);
给出错误:

SyntaxError:JSON.parse:JSON数据的第1行第122列出现意外的非数字

列122对应于json数据中的第一个“无穷大”值

是否有允许解析“无穷大”值的选项?我是否需要确保这些值永远不会到达数据库并转换为有效数字?

根据(尽管您的问题不是重复的),您最好的选择是生成正确的JSON,您可以将其传递到
d3.JSON

但是,如果这不是一个选项,您可以使用
d3.text
获取无效的JSON,如下所示(假设您使用的是D3V5):

然后,在
d3.text
(或v5中的
then
方法)中,您可以在使用
JSON.parse()之前,将
-Infinity
替换为相应的字符串:

此外,按照同一链接答案中的建议,您可以还原原始的
-Infinity
,通过使用
JSON.parse()中的reviser函数替换字符串:

由于我无法在堆栈代码段中使用真正的JSON,因此下面是一个区块构建器,使用与您类似的JSON:

[
    ["2019-03-13 08:59:42.445199", 20.0, -93150.3125, -1128635.625],
    ["2019-03-13 09:00:18.670074", 21.0, -116238.2734375, -Infinity],
    ["2019-03-13 09:00:54.897829", 21.0, -111895.09375, -1916368.5]
]

看看控制台:

它可以工作!它将提供一个健壮的选项来解析NaN值。另一种选择是确保这些值永远不会到达数据库,但这并不是一个聪明的解决方案。谢谢
textData = textData.replace(/-Infinity/g, '"-Infinity"');
const data = JSON.parse(textData);
textData = textData.replace(/-Infinity/g, '"-Infinity"');
const data = JSON.parse(textData, function(key, value){
    return value === "-Infinity" ? -Infinity : value;
});
[
    ["2019-03-13 08:59:42.445199", 20.0, -93150.3125, -1128635.625],
    ["2019-03-13 09:00:18.670074", 21.0, -116238.2734375, -Infinity],
    ["2019-03-13 09:00:54.897829", 21.0, -111895.09375, -1916368.5]
]