使用node.js解析多维人口普查数据

时间:2017-02-16 16:54:21

标签: javascript json node.js parsing census

我试图使用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(正文),结果显示为...

  

NAME,B01001_001E,状态,阿拉巴马州,4799277,01,阿拉斯加,720316,02,亚利桑那州,6479703,04,阿肯色州,2933369,05,加利福尼亚州,37659181,06,科罗拉多州,51   19329,08,康涅狄格,3583561,09,特拉华.......

如果我使用console.dir(body),结果会显示为....

  

[[NAME] [B01001] [状态]   ['Alabama','4799927','01'],   ['Alaska','720316','02'] .... ....

一直到波多黎各。我试图提取具体的东西,但我一直在树屋上使用的例子设置都很好,整齐,你可以使用像profile.badges.length这样的好东西拉出特别标记的东西,但据我所知,没有这些东西都贴上了标签。我想能够说,将弗吉尼亚州的信息从那里拉出来,或特拉华州。

1 个答案:

答案 0 :(得分:2)

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

要访问加利福尼亚州的人口,您需要从父级获得第6个(自0开始以来的索引5)嵌套数组。看起来像这样:

获得加州阵列 console.log(statePop[5]); // outputs ["California","37659181","06"]

通过获取加利福尼亚阵列中的第二项来获得加利福尼亚州的人口。 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)