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ライブラリのスイスアーミーナイフであり、この場合のようにデータセットを処理するときに非常に便利です。

2つのユースケースを解決する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 に答える