Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using NSJSONSerialization to parse JSON

Tags:

json

ios

iphone

Too many discussions have happened on this and yet I can't figure out how to solve my problem.

Here's the JSON data I get from WorldWeatherOnline. The JSON is valid. But I can't figure out how to parse it. This is my code, followed by the JSON. Please help!

NSError* errorInfo;
NSDictionary *parsedJSON = [NSJSONSerialization JSONObjectWithData:self.wwoWeatherData options:kNilOptions error:&errorInfo];

NSArray* temp = [parsedJSON objectForKey:@"temp_C"];
NSLog(@"%@", temp);
   {
   "data":{
      "current_condition":[
         {
            "cloudcover":"0",
            "humidity":"82",
            "observation_time":"11:07 PM",
            "precipMM":"0.0",
            "pressure":"1024",
            "temp_C":"16",
            "temp_F":"61",
            "visibility":"10",
            "weatherCode":"113",
            "weatherDesc":[
               {
                  "value":"Clear"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0008_clear_sky_night.png"
               }
            ],
            "winddir16Point":"NNE",
            "winddirDegree":"30",
            "windspeedKmph":"11",
            "windspeedMiles":"7"
         }
      ],
      "request":[
         {
            "query":"Lat 48.85 and Lon 2.35",
            "type":"LatLon"
         }
      ],
      "weather":[
         {
            "date":"2012-09-04",
            "precipMM":"0.0",
            "tempMaxC":"25",
            "tempMaxF":"77",
            "tempMinC":"14",
            "tempMinF":"57",
            "weatherCode":"113",
            "weatherDesc":[
               {
                  "value":"Sunny"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png"
               }
            ],
            "winddir16Point":"N",
            "winddirDegree":"5",
            "winddirection":"N",
            "windspeedKmph":"13",
            "windspeedMiles":"8"
         },
         {
            "date":"2012-09-05",
            "precipMM":"0.0",
            "tempMaxC":"22",
            "tempMaxF":"72",
            "tempMinC":"10",
            "tempMinF":"50",
            "weatherCode":"113",
            "weatherDesc":[
               {
                  "value":"Sunny"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png"
               }
            ],
            "winddir16Point":"NNE",
            "winddirDegree":"25",
            "winddirection":"NNE",
            "windspeedKmph":"20",
            "windspeedMiles":"13"
         },
         {
            "date":"2012-09-06",
            "precipMM":"0.0",
            "tempMaxC":"22",
            "tempMaxF":"71",
            "tempMinC":"11",
            "tempMinF":"51",
            "weatherCode":"113",
            "weatherDesc":[
               {
                  "value":"Sunny"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png"
               }
            ],
            "winddir16Point":"NE",
            "winddirDegree":"42",
            "winddirection":"NE",
            "windspeedKmph":"15",
            "windspeedMiles":"10"
         },
         {
            "date":"2012-09-07",
            "precipMM":"0.0",
            "tempMaxC":"24",
            "tempMaxF":"75",
            "tempMinC":"13",
            "tempMinF":"55",
            "weatherCode":"116",
            "weatherDesc":[
               {
                  "value":"Partly Cloudy"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png"
               }
            ],
            "winddir16Point":"ENE",
            "winddirDegree":"56",
            "winddirection":"ENE",
            "windspeedKmph":"13",
            "windspeedMiles":"8"
         },
         {
            "date":"2012-09-08",
            "precipMM":"0.0",
            "tempMaxC":"26",
            "tempMaxF":"78",
            "tempMinC":"16",
            "tempMinF":"61",
            "weatherCode":"113",
            "weatherDesc":[
               {
                  "value":"Sunny"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png"
               }
            ],
            "winddir16Point":"ENE",
            "winddirDegree":"76",
            "winddirection":"ENE",
            "windspeedKmph":"9",
            "windspeedMiles":"6"
         }
      ]
   }
}
like image 480
DS. Avatar asked Sep 04 '12 00:09

DS.


1 Answers

Your json that you parsed contains a dictionary named data. Within that dictionary is an array of current_condition. Keep drilling down through the data structures to find the attributes you are looking for:

NSDictionary *data = [parsedJSON objectForKey:@"data"];
NSArray *currentConditions = [data objectForKey:@"current_condition"];
NSDictionary *condition = [currentConditions objectAtIndex:0];
NSString *tempC = [condition objectForKey:@"temp_C"];
like image 77
highlycaffeinated Avatar answered Nov 01 '22 23:11

highlycaffeinated