簡體   English   中英

JSON-訪問JSON數組並分配變量

[英]JSON - Accessing JSON Array and assigning variables

我在名為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);
});

但這返回“未定義”。 我該如何向下鑽取另一個級別? 理想情況下,我想訪問每個州的特定年份,然后將其分配給一個變量,以便以后使用。

當前沒有第二層,因為狀態名稱及其屬性之間用逗號代替冒號:

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

這使值“ Alaska”和屬性字典與列表中的元素相鄰。 看來您想要的是:

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

這里的模式是在每個字符串名稱之后,我們都有一系列相關信息:因此您可以將其轉換為類似

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

那么您可以通過字符串名稱直接訪問這些信息

像這樣

censusData.areas.UnitedStates

轉換后將返回一個數組

您的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的結構更改為以下內容來訪問數據:

{"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] ,依此類推。

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

美國的數據位於censusData.areas[1] JSON的結構看起來有些奇怪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM