2012-09-04 5 views
7

Trop de discussions ont eu lieu à ce sujet et pourtant je n'arrive pas à comprendre comment résoudre mon problème.Utiliser NSJSONSerialization pour analyser JSON

Voici les données JSON que j'obtiens de WorldWeatherOnline. Le JSON est valide. Mais je ne peux pas comprendre comment l'analyser. Ceci est mon code, suivi par le JSON. S'il vous plaît aider!

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

Répondre

8

Votre JSON que vous analysables contient un dictionnaire nommé data. Dans ce dictionnaire se trouve un tableau de current_condition. Continuez à explorer les structures de données pour trouver les attributs que vous recherchez:

NSDictionary *data = [parsedJSON objectForKey:@"data"]; 
NSArray *currentConditions = [data objectForKey:@"current_condition"]; 
NSDictionary *condition = [currentConditions objectAtIndex:0]; 
NSString *tempC = [condition objectForKey:@"temp_C"]; 
+0

Si cela: NSLog (@ "% @", currentConditions); puis montre les valeurs dans current_condition? Si oui, alors ça ne marche pas. C'est montrer null. –

+0

Désolé, il y avait une erreur copier/coller. la deuxième ligne devrait tirer current_condition à partir des données, pas parsedJson – highlycaffeinated

+0

Cela a du sens. Mais si vous voyez ma requête, j'essaie d'obtenir temp_c. Quand j'imprime currentconditions, il me donne toutes les valeurs dans current_condition. Ai-je besoin de faire un ObjectAtIndex pour le tableau currentconditions? Si oui, ai-je vraiment besoin de coder en dur l'index? Je suis nouveau à coder JSON et iOS à la fois, alors s'il vous plaît ours avec moi. –

Questions connexes