2016-11-14 89 views
0

我使用d3.json来解码未知键/值的数据集。我需要将数字值转换为数字,然后单独保留。当键/值是动态时,将JSON值转换为数字

我的JSON是这样的:

[{"file":"morning","row_total":"1095935","attr1":"79","attr2":""}, 
{"file":"noon","row_total":"221167","attr1":"174","attr2":"114"}, 
{"file":"night","row_total":"1317102","attr1":"253","attr2":"114"}] 

它从d3.json的PHP文件读入。对于每个可以(不抛出NAN),我需要转换为数字(D3使用这个+号)值:

d3.json("getData.php", function(error, data) { 
    if (error) throw error; 

    data.forEach(function(d) { 
     if(!isNaN(d.i = +d.i) 
      d.i = +d.i 
     )}) 

显然有一个与我的测试/循环逻辑的问题。我非常感谢这里的一些指导。

谢谢!

回答

1

isNaN将工作在数字字符串 - 赋值运算符很可能抛出你的代码关闭 - 你可以这样做:

if(!isNaN(d.i)) { 

你也对你if声明与isNaN查缺第二)

isNaN("1") //false 
isNaN("x") //true 

假设我应该读更多。你需要2个循环 - 一个循环你的阵列,另一个测试你的循环对象的每个键/ val:

for (var i = 0; i < data.length; i++) { 
    for (var key in data[i]) { 
     if (!isNaN(data[i][key])) { 
      data[i][key] = +data[i][key]; 
     } 
    } 
} 
+0

tymeJV,谢谢你的提示。我还没有到那里......数据没有得到改变。这里是我改变我的代码,根据你的建议:data.forEach(function(d){if(!isNaN(d)){d = + d}}); – Phoebe

+0

@Phoebe - 编辑 - 首先误解您的问题。 – tymeJV

+0

是的!非常感谢!这是一个伟大的模型,我终于可以理解适当的逻辑。非常感激。 – Phoebe