将Excel文件转换为JSON:deviseJSON代码检查
我想将Excel文件中的数据转换为JSON文件。 然而,我不确定我的JSON代码的devise(即它是否以正确的方式组织起来,以便轻松处理?)我将使用这个JSON文件与D3.js。
这是我的Excel文件的一小部分:
我想将这些数据转换成一个JSON文件,以便与D3.js一起使用。 这是我迄今为止:
所以我的问题是: 这是一个很好的devise(方式)组织的数据,以便使用它与D3.js? 这是一个示例输出:
提前致谢!
这是一个有点主观的问题,但从我的经验来看,还有一个更好的办法:
既然你在D3工作,你可能正在做这样的事情:
d3.selectAll('div') .data(entities) .enter() .append('div') ...
所以你希望entities
是一个数组。 问题是你的实体是什么? 有没有一种观点认为实体是世界上所有的国家? 有没有一个观点,实体是所有的国家加上所有的地区加上整个世界? 或者,所有的观点都只是选定地区的所有国家,不包括地区本身?
除非你提出的JSON结构与你打算显示的实体组合相匹配,否则你的代码将不得不做一些连接和/或过滤数组,以获得一个你可以绑定的实体数组至。 也许没问题,但是它会在代码和数据结构之间产生一些不必要的耦合。
从我的经验来看,最灵活的方法(也可能是最简单的编码方式)就是保持层次平坦,就像在excel文件中一样。 因此,不要将区域编码到层次结构中,只需将它们放在一个单一的平面数组中即可:
{ "immigration": [ { "name": "All Countries" "values: [ { "Year": ..., "value": ... }, { "Year": ..., "value": ... }, ... ] }, { "name": "Africa" "values: [ { "Year": ..., "value": ... }, { "Year": ..., "value": ... }, ... ] }, { "name": "Eastern Africa" "continent": "Africa" "values": [ { "Year": ..., "value": ... }, { "Year": ..., "value": ... }, ... ] }, { "name": "Burundi" "continent": "Africa" "region": "East Africa" "values": [ { "Year": ..., "value": ... }, { "Year": ..., "value": ... }, ... ] }, { "name": "Djibouti" "continent": "Africa" "region": "East Africa" "values": [ { "Year": ..., "value": ... }, { "Year": ..., "value": ... }, ... ] }, ... ] }
请注意,即使数组是平的,这里仍然有一个层次结构 – region
和sub-region
属性。
你必须做一些过滤来提取你想显示的国家/地区。 但是,这比遍历你所build议的层次结构更简单:
var africanEntities = data.immigration.filter(function(country) { return country.continent == "Africa"; }); // Includes the region "East Africa" var justCountries = data.immigration.filter(function(country) { return country.continent != null && country.region != null; });
此外,d3还有令人敬畏的d3.nest()
,它可以让你将这些平坦的数据变成分层的数据:
var countriesByContinent = d3.nest() .key(function(d) { return d.continent; }) .map(data.immigration); var africanEntities = countriesByContinent['Africa'];
希望可以帮助….