Javascript 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,

我在一个名为census.JSON的文件中有以下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
    }], ]
}
我尝试使用以下方法访问存储在数组中的不同值:

$.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
,因为当使用点运算符时,它不能以数字开头或包含空格。