当列单独定义时,使用D3加载JSON
Loading JSON with D3 when columns are defined separately
我正在使用d3.js,我很难理解如何加载一个代表表(列和行)的JSON,其中列是单独定义的。
一个正常的JSON,我没有问题加载可能看起来像这样:
[
{
"id": 1,
"name": "A green door",
"price": 12.50
},
{
"id": 2,
"name": "A red door",
"price": 12.50
},
{
"id": 3,
"name": "A blue door",
"price": 12.50
}
]
相应的JSON与分隔的列看起来像这样:
{
"columns": [
{
"ColumnName":"id",
"DataType":"number"
},
{
"ColumnName":"name",
"DataType":"string"
},
{
"ColumnName":"price",
"DataType":"number"
}
],
"rows": [
[
"1",
"A green door",
"12.50"
],
[
"2",
"A red door",
"12.50"
],
[
"3",
"A blue door",
"12.50"
]
]
}
是否有可能使d3.js加载这种JSON而不重建一个新的JSON?
我收到的JSON的原始结构是不可更改的。
谢谢你的帮助
用d3加载分隔列(Format 2)的JSON不会有任何问题。你只需要在加载后转换JSON格式,以匹配d3布局所需的格式。为此,您可以尝试下面所示的代码。
d3.json("path/to/column_json_file_name.json", function(error, data) {
if (error) return console.warn(error);
var columns = data.columns.map(function(d){ return d.ColumnName });
var jsonInRquiredFormat = data.rows.map(function(row,i){
var ob = {};
ob[columns[0]] = parseInt(row[0]);
ob[columns[1]] = row[1];
ob[columns[2]] = parseFloat(row[2]);
return ob;
});
console.log(jsonInRquiredFormat);
});
样本输入的输出:
[{
"id": 1,
"name": "A green door",
"price": 12.5
}, {
"id": 2,
"name": "A red door",
"price": 12.5
}, {
"id": 3,
"name": "A blue door",
"price": 12.5
}]
相关文章:
- 使用D3.js计算带有字母间距的文本长度
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- 如何使用D3生成特定范围内的随机颜色
- 在新窗口上使用d3.js
- 如何使用d3在基于网格的(热图)图表上正确显示轴
- 使用D3.js和GeoJson在地图上的某些坐标上设置一个小图像
- 使用D3将Ticks值更改为文本
- 如何使用d3.js从csv文件中绘制areaplot?请任何人分享代码
- 在Rails ActiveAdmin中使用D3
- 使用D3.js和GeoJson在地图上显示States上的一些文本
- 具有树状布局,如何更改X轴以使用D3中的时间刻度
- 在多行图表中,在每一行的末尾,我想要一个小圆圈和使用d3.js的端点值
- 如何使用D3.js根据json中给出的数据在Heatmap中创建可变大小的矩形
- 使用 D3 和拓扑时混淆路径
- 我如何使用D3来强制用户点击g.node对象内部的圆形对象
- 使用D3.min查找非0的最低值
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 如何使用d3.layout.cloud.js创建一个包含单词及其权重的csv的单词云
- 使用d3.relayout.stack()堆栈多个度量的DRY方式
- 不使用 d3 中指定的范围的线性刻度