2014-12-05 21 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