2012-09-04 9 views
7

Demasiadas discusiones han sucedido en esto y todavía no puedo encontrar la manera de resolver mi problema.Usar NSJSONSerialization para analizar JSON

Aquí están los datos JSON que obtengo de WorldWeatherOnline. El JSON es válido. Pero no puedo descifrar cómo analizarlo. Este es mi código, seguido de JSON. ¡Por favor ayuda!

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

Respuesta

8

Su JSON que Analizada contiene un diccionario llamado data. Dentro de ese diccionario hay una matriz de current_condition. Siga profundizando en las estructuras de datos para encontrar los atributos que está buscando:

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

En caso de que: NSLog (@ "% @", currentConditions); luego muestra los valores dentro de current_condition? Si es así, entonces no está funcionando. Está mostrando nulo. –

+0

lo siento, tenía un error de copiar/pegar. la segunda línea debe extraer current_condition de los datos, no parsedJson – highlycaffeinated

+0

Eso tiene sentido. Pero si ves mi consulta, estoy tratando de obtener temp_c. Cuando imprimo las condiciones actuales, me da todos los valores dentro de current_condition. ¿Debo hacer un ObjectAtIndex para el conjunto de condiciones actuales? Si es así, ¿realmente necesito codificar el índice? Soy nuevo en la codificación JSON y iOS ambos, así que por favor tengan paciencia conmigo. –

Cuestiones relacionadas