使用node.js解析多维人口普查数据
using node.js to parse multi-dimensional census data
我正在尝试使用 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' ]] ....
一直到波多黎各。我正在尝试提取特定的东西,但我在 Treehouse 上使用的示例都设置得非常漂亮和整洁,您可以在其中使用 profile.badges.length 等漂亮的东西提取特别标记的东西,但据我所知,none 这些东西都贴上了标签。我想能够说,从那里或特拉华州提取弗吉尼亚州的信息。
您在 Treehouse 上看到的示例很可能使用带有键 {Alabama: {...}}
的对象,而不是您从 census.gov [["Alabama", ...]]
返回的数组。
要访问加利福尼亚的人口,您需要从父级获取第 6 个(索引 5,因为它基于 0)嵌套数组。看起来像这样:
获取加州数组
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";
但是你必须知道名称中有 space 的州,例如 "New York"。您不能使用点符号来访问这些 (console.log(popByState.New York.population)
) 您必须使用方括号 console.log(popByState['New York'].population)
我正在尝试使用 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' ]] ....
一直到波多黎各。我正在尝试提取特定的东西,但我在 Treehouse 上使用的示例都设置得非常漂亮和整洁,您可以在其中使用 profile.badges.length 等漂亮的东西提取特别标记的东西,但据我所知,none 这些东西都贴上了标签。我想能够说,从那里或特拉华州提取弗吉尼亚州的信息。
您在 Treehouse 上看到的示例很可能使用带有键 {Alabama: {...}}
的对象,而不是您从 census.gov [["Alabama", ...]]
返回的数组。
要访问加利福尼亚的人口,您需要从父级获取第 6 个(索引 5,因为它基于 0)嵌套数组。看起来像这样:
获取加州数组
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";
但是你必须知道名称中有 space 的州,例如 "New York"。您不能使用点符号来访问这些 (console.log(popByState.New York.population)
) 您必须使用方括号 console.log(popByState['New York'].population)