2014-12-05 19 views
0

我有一个文件下面的JSON称为census.json: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); 
}); 

但这返回“未定义”。我如何钻取另一个级别?理想情况下,我想访问特定年份的每个州人口,然后将其分配给我可以稍后使用的变量。

+0

你必须在每个级别迭代它 – 2014-12-05 07:04:27

+0

你的代码将通过JSON。解析或评估,但不会按照您想要的方式工作,它是混合对象的数组:“字符串”+“对象”。你应该重新格式化它。您无法访问censusData.areas.UnitedStates导致对象UnitedStates不存在它是字符串“区域”中的“UnitedStates”。但你可以查看censusData.areas [0]它会给你字符串“UnitedStates”。如果您将在censusData.areas中进行迭代,它会为您提供“字符串”,“对象”,“字符串”,“对象”等的混合。结论是重新格式化这个JSON。 – genichm 2014-12-05 07:23:37

回答

-1

字符串"United States"是列表中的第一个元素。

美国的数据在于censusData.areas[1]。 JSON的结构看起来有点奇怪。

0

目前没有第二级,因为有逗号代替状态名称和它们的属性之间的冒号:

"Alaska", [{ 
    "STATEORREGION":"Alaska", 
    "1910POPULATION":64356, 
    ... 

这使得值“阿拉斯加”,并且在列表属性相邻元件的字典。看来你想要的是:

"Alaska": [{ 
    "STATEORREGION":"Alaska", 
    "1910POPULATION":64356, 
    ... 
0

这里的模式是每个字符串名称后,我们有相关信息的数组: 这样你就可以将其转换为一个对象像

var _result = {}; 
    for (var i=0;i<arr.length/2;i++){ 
     _result[arr[i]] = arr[i+1]; 
    } 

那么你可以通过他们的字符串名称直接访问这些信息

这样

censusData.areas.UnitedStates 

将在改造后返回数组

0

您的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 
    }] 
] 
} 
0

所以我能够通过改变JSON的结构,下面来访问数据:

{"areas" : [ [{ "STATEORREGION":"United States", "POPULATION1910":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 }], [{ "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 }], [{ "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[0][0].POPULATION1910); });

另请注意,我必须将1910POPULATION更改为POPULATION1910才能访问它而不会出现错误。比改变每个州的每个关键名称可能有更好的方法来做到这一点。

当我想访问下一个状态时,我只是将censusData[0][0]更改为censusData[1][0]依此类推。

+0

我无法使用'1910POPULATION',因为当您使用点运算符时,它不能以数字开头或包含空格。 – user2340791 2014-12-05 19:22:48