使用node.js解析多维人口普查数据
Posted
技术标签:
【中文标题】使用node.js解析多维人口普查数据【英文标题】:using node.js to parse multi-dimensional census data 【发布时间】:2017-07-05 22:19:28 【问题描述】:我正在尝试使用 node.js JSON.parse 从人口普查数据中提取单个行和特定数据。
const http = require('http');
function printStuff(statesInfo)
const statesPopulations = `$statesInfo This is all states info`;
console.log(statesPopulations);
const request = http.get(`http://api.census.gov/data/2013/acs5?get=NAME,B01001_001E&for=state:*&key=4c2f7253819e5491c78ff2c5ed541fe95943854c`,
response =>
let body = "";
console.log('Status Code:', response.statusCode);
response.on('data', data=>
body += data.toString();
);
response.on('end', () =>
const statePop = JSON.parse(body);
const statesInfo = JSON.parse(body);
printStuff(statesInfo);
)
);
使用 console.log(body) 结果显示为...
NAME,B01001_001E,state,Alabama,4799277,01,Alaska,720316,02,Arizona,6479703,04,Arkansas,2933369,05,California,37659181,06,Colorado,51 19329,08,Connecticut,3583561,09,Delaware.......
如果我使用console.dir(body),结果显示为....
[[姓名][B01001][状态] ['阿拉巴马','4799927','01'], ['阿拉斯加','720316','02']] ....
一直到波多黎各。我正在尝试提取特定的东西,但是我在 Treehouse 上使用的示例都设置得很好,很整洁,您可以使用 profile.badges.length 之类的好东西拉出专门标记的东西,但据我所知,没有这些东西都被贴上了标签。我想说的是,将弗吉尼亚州或特拉华州的信息撤出那里。
【问题讨论】:
在response.on('data')
函数中,data
已经是有效的 JSON。当您调用data.toString()
时,您正在破坏对象并将其变成字符串,因此您无法取出您想要的东西。只需按原样使用数据。 -- 编辑 -- 实际上,没关系.. 从该请求返回的数据以一种奇怪的、无用的方式格式化.. 很难得到你想要的。
【参考方案1】:
您在 Treehouse 上看到的示例很可能使用带有键 Alabama: ...
的对象,而不是您从 census.gov [["Alabama", ...]]
返回的数组。
要访问加利福尼亚的人口,您需要从父级获取第 6 个(索引 5,因为它基于 0)嵌套数组。看起来像这样:
获取加利福尼亚数组
console.log(statePop[5]); // outputs ["California","37659181","06"]
通过获取 California 数组中的第二项来获取加利福尼亚的人口。
console.log(statePop[5][1]); // outputs "37659181"
如果您想要一个更易于阅读的版本(例如 Treehouse 示例),您必须使用数组中的键创建一个对象。您可以使用 lodash 之类的方法轻松完成此操作,也可以像这样手动操作:
var popByState = ;
// loop through each state and assign values to object keyed by the state name
statePop.forEach(function(stateArr)
popByState[stateArr[0]] = population: stateArr[1];
// Ex stateArr = ["California","37659181","06"]
// stateArr[0] is the name of the state
// stateArr[1] is the population
);
console.log(popByState.California.population) // outputs "37659181";
但是您必须注意名称中有空格的州,例如“纽约”。你不能使用点符号来访问这些(console.log(popByState.New York.population)
)你必须使用括号console.log(popByState['New York'].population)
【讨论】:
帮助很大。我用工作键创建了我自己的对象。我不知道这是可能的,上面的代码真的帮助了我。我想使它统一并适合用户输入,我可以对所有状态使用 popByState['StateHere'].population 而不是 popByState.stateHere.population。 @Mike 真棒,很高兴它有帮助!等你一分钟,请接受答案。以上是关于使用node.js解析多维人口普查数据的主要内容,如果未能解决你的问题,请参考以下文章
1分钟读懂人口普查大数据——第七次人口普查数据可视化BI分析
1分钟读懂人口普查大数据——第七次人口普查数据可视化BI分析
1953~2021年七次全国人口普查以及各省人口数量变化情况