Parsing json devuelto por foursquare para iPhone da un personaje principal no reconocido

Estoy tratando de get los lugares cercanos usando la api foursquare. Aquí están los datos json que se devuelven de

NSDictionary *results = [jsonString JSONValue]; NSLog(@"%@", results); ( { code = 200; errorDetail = "This endpoint will stop returning groups in the future. Please use a current version, see http://bit.ly/lZx3NU."; errorType = deprecated; }, { groups = ( { items = ( { categories = ( { icon = "https://foursquare.com/img/categories/parks_outdoors/default.png"; id = 4bf58dd8d48988d163941735; name = Park; parents = ( "Great Outdoors" ); pluralName = Parks; primary = 1; shortName = Park; } ); 

Luego trato de get la list de los grupos en una matriz con

 NSArray *groups = [ (NSDictionary *)results objectForKey:@"groups"]; 

Esto devuelve el siguiente error

 2011-11-05 11:42:12.907 XperienzApp[1972:207] No of results returned: 0 Results : (null) 2011-11-05 11:42:13.225 XperienzApp[1972:207] -JSONValue failed. Error trace is: ( "Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Unrecognised leading character\" UserInfo=0x5849cd0 {NSLocalizedDescription=Unrecognised leading character}" ) 2011-11-05 11:42:13.225 XperienzApp[1972:207] No of results returned: 0 Results : (null) 

¿Cómo debo analizar esto?

Edit: probé la técnica sugerida, esto me da una matriz

 id groups = [[(NSDictionary *)results objectForKey:@"response"] objectForKey:@"groups"]; if ([results count] > 1){ NSLog(@"groups class %@\ngroups %@ %d", groups, [groups class], [groups count]); 

La salida del logging es de la forma:

  { categories = ( { icon = "https://foursquare.com/img/categories/nightlife/danceparty.png"; id = 4bf58dd8d48988d11f941735; name = Nightclub; parents = ( "Nightlife Spots" ); pluralName = Nightclubs; primary = 1; shortName = Nightclub; } ); contact = { }; hereNow = { count = 0; }; id = 4eb33ba561af0dda8f673c1b; location = { address = "144 Willow St 4R"; city = Brooklyn; crossStreet = Pierrepont; distance = 462; lat = "40.696864"; lng = "-73.996409"; postalCode = 11201; state = NY; }; name = "Entertainment 720, Ltd."; stats = { checkinsCount = 3; tipCount = 0; usersCount = 1; }; verified = 0; } ); name = Nearby; type = nearby; } ) groups __NSArrayM 1 

Esto no es de nuevo json y es difícil de analizar, ¿cómo obtengo el resultado en json?

Soy el líder del iPhone en foursquare. Trataré de apuñalar lo que sucede aquí.

Antes que nada, le recomiendo que utilice JSONKit para su analizador. Es ligero y increíblemente rápido: https://github.com/johnezang/JSONKit

Parece que estás parsing correctamente el JSON y obteniendo el dictionary correctamente. Luego está registrando el object analizado, no el JSON original. El resultado que está viendo es cómo Objective-C elige serializar el dictionary analizado en text. Definitivamente no es JSON. Usando JSONKit, puede enviar el selector de JSONString a su resultado analizado y convertirlo nuevamente a JSON y registrar eso.

Si pudiera proporcionar algunos detalles sobre el problema que está tratando de resolver, podría ayudarlo más. Y como dijo Maudicus, preste atención al error que está recibiendo. No quieres que tu aplicación se rompa cuando realizamos el cambio a la API.

Si el resultado debajo de NSLog(@"%@", results); es su statement de logging. Parece que su variable de resultados es una matriz de objects de dictionary.

Intente registrar la class de resultados para verificar que NSLog(@"%@", [results class]);

Si se trata de una matriz, su object de grupo es el segundo object.

 if ([results count] > 1) id groups = [results objectAtIndex:1]; NSLog(@"groups class %@\ngroups %@", [groups class], groups); 

Siga haciendo esto hasta que entienda el formatting de sus datos

También la línea

 errorDetail = "This endpoint will stop returning groups in the future. Please use a current version, see http://bit.ly/lZx3NU."; 

debe ser motivo de preocupación. Consulte la documentation de foursquare para conocer la forma actual de get grupos.