使用node.jsparsing多维普查数据

我试图从人口普查数据使用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),结果显示为….

[[NAME] [B01001] [state] ['Alabama','4799927','01'],['Alaska','720316','02']] ….

一直到波多黎各。 我正在尝试抽出特定的东西,但是我在树屋中使用的例子都设置得很好,很整齐,你可以使用诸如profile.badges.length之类的好东西来特别标记出来,但是从我可以告诉的是,这些东西被贴上标签。 我想能够说,拉弗吉尼亚州的信息,或特拉华州。

很可能您在Treehouse上看到的示例使用的是具有键{Alabama: {...}}的对象,而不是您从census.gov [["Alabama", ...]]返回的数组。

要访问加利福尼亚州的人口,你需要得到从父母的第六(索引5,因为它基于0)嵌套数组。 看起来像这样:

得到加利福尼亚arraysconsole.log(statePop[5]); // outputs ["California","37659181","06"] console.log(statePop[5]); // outputs ["California","37659181","06"]

通过获得加州arrays中的第二个项目来获得加利福尼亚州的人口。 console.log(statePop[5][1]); // outputs "37659181"

如果你想要一个更可读的版本(比如Treehouse的例子),你将不得不用数组中的键创build一个对象。 你可以用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)

Interesting Posts