0

如何使用 javascript 并根据提供的输入获取我的 JSON 数据?

我的 JSON 文件如下所示...

{
    "Name1": {
        "id": "32313",
        "latitude": "57.1",
        "longitude": "9.85",
        "timezone": "2",
        "city": "Aalborg",
        "country": "Denmark",
        "country_code": "DK"
    },
    "Name2": {
        "id": "32314",
        "latitude": "56.15",
        "longitude": "10.2167",
        "timezone": "2",
        "city": "Aarhus",
        "country": "Denmark",
        "country_code": "DK"
    },
    "Name3": {
        "id": "122109",
        "airport_name": "Aasiaat",
        "latitude": "68.7",
        "longitude": "-52.75",
        "timezone": "-3",
        "city": "Aasiaat",
        "country": "Greenland",
        "country_code": "GL"
    },
    "Name4": {
        "id": "116713",
        "latitude": "30.371111",
        "longitude": "48.228333",
        "timezone": "4",
        "city": "Abadan",
        "country": "Iran",
        "country_code": "IR"
    },
    "Name5": {
        "id": "116711",
        "latitude": "53.74",
        "longitude": "91.385",
        "timezone": "7",
        "city": "Abakan",
        "country": "Russia",
        "country_code": "RU"
    },
    "Name6": {
        "id": "120587",
        "latitude": "49.05",
        "longitude": "-122.2833",
        "timezone": "-7",
        "city": "Abbotsford",
        "country": "Canada",
        "country_code": "CA"
    },
    "Name7": {
        "id": "116759",
        "latitude": "13.847",
        "longitude": "20.844333",
        "timezone": "1",
        "city": "Abeche",
        "country": "Chad",
        "country_code": "TD"
    },
    "Name8": {
        "id": "32325",
        "latitude": "57.2",
        "longitude": "-2.2",
        "timezone": "1",
        "city": "Aberdeen",
        "country": "United Kingdom",
        "country_code": "GB"
    }
}

从上面的 JSON 文件中......我需要得到以下内容:

  1. 获取国家列表
  2. 根据提供的国家名称获取城市名称。

请帮我解析上面的 JSON 文件....

谢谢, 尤甘达

4

3 回答 3

1
var info = {
    "Name1": {
        "id": "32313",
        "latitude": "57.1",
        "longitude": "9.85",
        "timezone": "2",
        "city": "Aalborg",
        "country": "Denmark",
        "country_code": "DK"
    },
    ....
    "Name8": {
        "id": "32325",
        "latitude": "57.2",
        "longitude": "-2.2",
        "timezone": "1",
        "city": "Aberdeen",
        "country": "United Kingdom",
        "country_code": "GB"
    }
}

//stores countries in an array
var countries = [];
//stores cities in an object keyed on the contrycode
var cities = {};        
var keyNames = {};
for(var prop in ​info){
   var country = info[prop]["country"];
   var country_code = info[prop]["country_code"];
   var cityname = info[prop]["city"];

   countries.push(country);
   var city = cities[country_code];
   if(typeof city == "undefined"){
        cities[country_code] = [];         
   }

   var key = keyNames[country_code];
   if(typeof key == "undefined"){
        keyNames[country_code] = []; 
   }

   cities[country_code].push(cityname);
   keyNames[country_code].push(prop);
}

console.log(cities);
console.log(countries);

​</p>

于 2012-06-04T06:11:31.243 回答
1
var countries = [];
// Vanilla Javascript
// Get Array of countries
for( var name in json ){
  countries.push(json[name]["country"]);
}
// Get city name based on country name

var getCities =  function(country){
  var cities = [];
  for( var name in json ){
    if (country === json[name]["country"]){
      cities.push(name);
    }
  }
  return cities;
}

// Usage
var cities = getCities("Denmark"); //
于 2012-06-04T06:17:16.383 回答
0

Underscore.js ( http://documentcloud.github.com/underscore/ ) 是 javascript 库的瑞士军刀,在处理这种情况下的数据集时非常有用。

我创建了一个 jsfiddle 来解决你的两个用例http://jsfiddle.net/4NJPc/

以下是重要部分:

function getCityData(country) {
    return _(data)
        .filter(function(el) {
            return el.country === country;
        });           
}

function getCountries() {
    return _(data).chain().pluck("country").uniq().value();
}
于 2012-06-04T15:41:37.097 回答