0

How I can get my JSON data using javascript and based on the input provided?

My JSON file looks below...

{
    "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"
    }
}

From the above JSON file... I need to get the following:

  1. Get the list of countrys
  2. Get the city names based on the country name provided.

Please help me to parse the above JSON file....

Thanks, Yugandhar

3 Answers 3

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"); //
Sign up to request clarification or add additional context in comments.

Comments

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);

5 Comments

How to get the key names based on country or city names... for example: getKeyName(Country) should return "Name1/Name2/" like that
well you dont need to use the country_code as the key unless you want to, you can replace cities[country_code] with cities[country]. If you did want to usee the country_code as the key, just add another global variable called var country_codes = [] and add country_codes.push(country_code);
Hi... I think i didn't put my question properly... i want to retrieve Name1/ Name2 when the corresponding country code that i provided... if I say Country_Code = "GB" then my return value = "Name8"...
ahh sorry, I misunderstood, Ive updated my code with a keyNames object
Hey @YugandharKumar just following up, did that keyNames object work for you?
0

Underscore.js ( http://documentcloud.github.com/underscore/ ) is the swiss army knife of javascript libraries, it is very useful when handling data sets like in this case.

I created a jsfiddle that solves your two use cases http://jsfiddle.net/4NJPc/

Here are the important parts:

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

function getCountries() {
    return _(data).chain().pluck("country").uniq().value();
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.