Javascript JSON-访问JSON数组并分配变量
我在一个名为census.JSON的文件中有以下JSON:Javascript JSON-访问JSON数组并分配变量,javascript,jquery,arrays,json,getjson,Javascript,Jquery,Arrays,Json,Getjson,我在一个名为census.JSON的文件中有以下JSON: { "areas": [ "UnitedStates", [{ "STATEORREGION": "United States", "1910POPULATION": 92228531, "1920POPULATION": 106021568, "1930POPULATION": 123202660,
{
"areas": [
"UnitedStates", [{
"STATEORREGION": "United States",
"1910POPULATION": 92228531,
"1920POPULATION": 106021568,
"1930POPULATION": 123202660,
"1940POPULATION": 132165129,
"1950POPULATION": 151325798,
"1960POPULATION": 179323175,
"1970POPULATION": 203211926,
"1980POPULATION": 226545805,
"1990POPULATION": 248709873,
"2000POPULATION": 281421906,
"2010POPULATION": 308745538,
"1910CHANGE": 21,
"1920CHANGE": 15,
"1930CHANGE": 16.2,
"1940CHANGE": 7.3,
"1950CHANGE": 14.5,
"1960CHANGE": 18.5,
"1970CHANGE": 13.3,
"1980CHANGE": 11.5,
"1990CHANGE": 9.8,
"2000CHANGE": 13.2,
"2010CHANGE": 9.7
}],
"Alabama", [{
"STATEORREGION": "Alabama",
"1910POPULATION": 2138093,
"1920POPULATION": 2348174,
"1930POPULATION": 2646248,
"1940POPULATION": 2832961,
"1950POPULATION": 3061743,
"1960POPULATION": 3266740,
"1970POPULATION": 3444165,
"1980POPULATION": 3893888,
"1990POPULATION": 4040587,
"2000POPULATION": 4447100,
"2010POPULATION": 4779736,
"1910CHANGE": 16.9,
"1920CHANGE": 9.8,
"1930CHANGE": 12.7,
"1940CHANGE": 7.1,
"1950CHANGE": 8.1,
"1960CHANGE": 6.7,
"1970CHANGE": 5.4,
"1980CHANGE": 13.1,
"1990CHANGE": 3.8,
"2000CHANGE": 10.1,
"2010CHANGE": 7.5
}],
"Alaska", [{
"STATEORREGION": "Alaska",
"1910POPULATION": 64356,
"1920POPULATION": 55036,
"1930POPULATION": 59278,
"1940POPULATION": 72524,
"1950POPULATION": 128643,
"1960POPULATION": 226167,
"1970POPULATION": 300382,
"1980POPULATION": 401851,
"1990POPULATION": 550043,
"2000POPULATION": 626932,
"2010POPULATION": 710231,
"1910CHANGE": 1.2,
"1920CHANGE": -14.5,
"1930CHANGE": 7.7,
"1940CHANGE": 22.3,
"1950CHANGE": 77.4,
"1960CHANGE": 75.8,
"1970CHANGE": 32.8,
"1980CHANGE": 33.8,
"1990CHANGE": 36.9,
"2000CHANGE": 14,
"2010CHANGE": 13.3
}], ]
}
我尝试使用以下方法访问存储在数组中的不同值:
$.getJSON("../data/census.json", function (json) {
var censusData = json;
console.log(censusData.areas);
});
这会将所有状态作为一个对象记录到控制台中,因此我尝试下一个级别:
$.getJSON("../data/census.json", function (json) {
var censusData = json;
console.log(censusData.areas.UnitedStates);
});
但这返回“未定义”。我怎样才能深入到另一个层次?理想情况下,我希望访问特定年份的每个州人口,然后将其分配给我以后可以使用的变量。字符串“United states”
是列表中的第一个元素
美国的数据在
censusData.areas[1]
中。JSON的结构看起来有点奇怪。目前没有第二级,因为在状态名称及其属性之间有逗号而不是冒号:
"Alaska", [{
"STATEORREGION":"Alaska",
"1910POPULATION":64356,
...
这使得值“阿拉斯加”和属性字典在列表中相邻元素。看来你想要的是:
"Alaska": [{
"STATEORREGION":"Alaska",
"1910POPULATION":64356,
...
这里的模式位于每个字符串名称之后,我们有一个相关信息数组: 因此,您可以将其转换为类似
var _result = {};
for ( var i=0;i<arr.length/2;i++){
_result[arr[i]] = arr[i+1];
}
将在此转换后返回一个数组您的json数据无效,请尝试此操作
{"areas" : [
"UnitedStates", [{
"STATEORREGION":"United States",
"1910POPULATION":92228531,
"1920POPULATION":106021568,
"1930POPULATION":123202660,
"1940POPULATION":132165129,
"1950POPULATION":151325798,
"1960POPULATION":179323175,
"1970POPULATION":203211926,
"1980POPULATION":226545805,
"1990POPULATION":248709873,
"2000POPULATION":281421906,
"2010POPULATION":308745538,
"1910CHANGE":21,
"1920CHANGE":15,
"1930CHANGE":16.2,
"1940CHANGE":7.3,
"1950CHANGE":14.5,
"1960CHANGE":18.5,
"1970CHANGE":13.3,
"1980CHANGE":11.5,
"1990CHANGE":9.8,
"2000CHANGE":13.2,
"2010CHANGE":9.7
}],
"Alabama", [{
"STATEORREGION":"Alabama",
"1910POPULATION":2138093,
"1920POPULATION":2348174,
"1930POPULATION":2646248,
"1940POPULATION":2832961,
"1950POPULATION":3061743,
"1960POPULATION":3266740,
"1970POPULATION":3444165,
"1980POPULATION":3893888,
"1990POPULATION":4040587,
"2000POPULATION":4447100,
"2010POPULATION":4779736,
"1910CHANGE":16.9,
"1920CHANGE":9.8,
"1930CHANGE":12.7,
"1940CHANGE":7.1,
"1950CHANGE":8.1,
"1960CHANGE":6.7,
"1970CHANGE":5.4,
"1980CHANGE":13.1,
"1990CHANGE":3.8,
"2000CHANGE":10.1,
"2010CHANGE":7.5
}],
"Alaska", [{
"STATEORREGION":"Alaska",
"1910POPULATION":64356,
"1920POPULATION":55036,
"1930POPULATION":59278,
"1940POPULATION":72524,
"1950POPULATION":128643,
"1960POPULATION":226167,
"1970POPULATION":300382,
"1980POPULATION":401851,
"1990POPULATION":550043,
"2000POPULATION":626932,
"2010POPULATION":710231,
"1910CHANGE":1.2,
"1920CHANGE":-14.5,
"1930CHANGE":7.7,
"1940CHANGE":22.3,
"1950CHANGE":77.4,
"1960CHANGE":75.8,
"1970CHANGE":32.8,
"1980CHANGE":33.8,
"1990CHANGE":36.9,
"2000CHANGE":14,
"2010CHANGE":13.3
}]
]
}
因此,我可以通过将JSON的结构更改为以下内容来访问数据:
$.getJSON("../data/census.json", function (json) {
var censusData = json;
console.log(censusData.areas);
});
{“区域”:[
[{
“州或地区”:“美国”,
“人口1910”:92228531,
“1920人口”:106021568,
“1930年人口”:123202660,
“1940年人口”:132165129,
“1950年人口”:151325798,
“1960年人口”:179323175,
“1970年人口”:203211926,
“1980年人口”:226545805,
“1990年人口”:248709873,
“2000人口”:281421906,
“2010年人口”:308745538,
“1910年变化”:21,
“改变”:15,
“1930年变化”:16.2,
“改变”:7.3,
“1950年变化”:14.5,
“1960年变化”:18.5,
“1970年变化”:13.3,
“1980年变化”:11.5,
“1990年变化”:9.8,
“2000年变化”:13.2,
“2010年变化”:9.7
}],
[{
“州或地区”:“阿拉巴马州”,
“1910人口”:2138093,
“1920人口”:2348174,
“1930年人口”:2646248,
“1940年人口”:2832961,
“1950年人口”:3061743,
“1960年人口”:3266740,
“1970人口”:3444165,
“1980年人口”:3893888,
“1990年人口”:4040587,
“2000人口”:4447100,
“2010年人口”:4779736,
“1910年变化”:16.9,
“改变”:9.8,
“1930年变化”:12.7,
“改变”:7.1,
“1950变更”:8.1,
“1960年变化”:6.7,
“1970年变化”:5.4,
“1980年变化”:13.1,
“1990年变化”:3.8,
“2000年变化”:10.1,
“2010年变化”:7.5
}],
[{
“州或地区”:“阿拉斯加”,
“1910人口”:64356,
“1920人口”:55036,
“1930年人口”:59278,
“1940年人口”:72524,
“1950年人口”:128643,
“1960年人口”:226167,
“1970人口”:300382,
“1980年人口”:401851,
“1990年人口”:550043,
“2000人口”:626932,
“2010年人口”:710231,
“1910变化”:1.2,
“改变”:-14.5,
“1930年变化”:7.7,
“变化”:22.3,
“1950年变化”:77.4,
“1960年变化”:75.8,
“1970年变化”:32.8,
“1980年变化”:33.8,
“1990年变化”:36.9,
“2000年变化”:14,
“2010年变化”:13.3
}]
]
}
然后我用了:
$.getJSON(“../data/census.json”),函数(json){
var censusData=json;
console.log(censusData.areas[0][0].POPULATION1910);
});代码>
还要注意的是,我必须将1910POPULATION
更改为POPULATION1910
,以便访问它而不会出错。可能有更好的方法来实现这一点,而不是更改每个州的每个键名
当我想访问下一个状态时,我刚刚将censusData[0][0]
更改为censusData[1][0]
等等。您必须在每个级别上迭代它您的代码将传递JSON.parse或eval,但不会按照您想要的方式工作,它是一个混合对象数组:“字符串”+“对象”。你应该重新格式化它。您无法访问censusData.areas.UnitedStates,因为对象UnitedStates不存在。它是数组“areas”内的字符串“UnitedStates”。但您可以查看censusData.areas[0],它将为您提供字符串“UnitedStates”。如果您在censusData.area中进行迭代,它将混合使用“字符串”、“对象”、“字符串”、“对象”等。结论是重新格式化此json。我无法使用1910POPULATION
,因为当使用点运算符时,它不能以数字开头或包含空格。