将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": ... }, ... ] }, ... ] } 

请注意,即使数组是平的,这里仍然有一个层次结构 – regionsub-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']; 

希望可以帮助….