Problema de deserialización de JSonKit

Tengo JSON como NSString:

[{"bus_number":"1","created_at":"2011-08-15T23:07:52Z","id":1,"model":"Setra","registar_number":"123456","seats":50,"tour_id":1,"updated_at":"2011-08-15T23:07:52Z"},{"bus_number":"2","created_at":"2011-08-15T23:07:52Z","id":2,"model":"Mercedes","registar_number":"2234","seats":60,"tour_id":1,"updated_at":"2011-08-15T23:07:52Z"}]

y estoy tratando de convertir este NSString en NSDictionary.

Cuando uso:

NSDictionary *sourceDictionary = [[response bodyAsString] objectFromJSONString];

Obtengo NSDictionary así:

(
    {
    "bus_number" = 1;
    "created_at" = "2011-08-15T23:07:52Z";
    id = 1;
    model = Setra;
    "registar_number" = 123456;
    seats = 50;
    "tour_id" = 1;
    "updated_at" = "2011-08-15T23:07:52Z";
},
    {
    "bus_number" = 2;
    "created_at" = "2011-08-15T23:07:52Z";
    id = 2;
    model = Mercedes;
    "registar_number" = 2234;
    seats = 60;
    "tour_id" = 1;
    "updated_at" = "2011-08-15T23:07:52Z";
}

)

pero, hay un problema con este NSDictionary, no puedo acceder a sus elementos, algunos elementos no son NSStrings (como el modelo).

¿Cómo convertir JSONString a NSDictionary con NSStrings?

EDIT:

Cuando intento iniciar sesión en la consola, esto con:

for (id key in sourceDictionary) {
            NSLog(@"key: %@, value: %@", key, [sourceDictionary objectForKey:key]);
        }

Obtengo una excepción:

-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x1c3a50

preguntado el 27 de agosto de 11 a las 23:08

No obtiene un NSDictionary con esta línea NSDictionary *sourceDictionary = [[response bodyAsString] objectFromJSONString];, obtiene un NSArray -

¿Cómo? La clase de objeto es NSDictionary: -o -

objectFromJSONString devuelve id, en este caso puede devolver un NSArray o un NSDictionary. Solo porque eligió declarar su variable como NSDictionary *sourceDictionary no significa que será un diccionario. Hay dos pruebas en su publicación para esto: A) La excepción (donde dice que sourceDictionary es en realidad una matriz). B) El "diccionario" que tienes tiene dos objetos, pero no claves para esos objetos, porque en realidad es una matriz;) -

2 Respuestas

Si está obteniendo esto de RestKit, y parece que lo está, puede hacer esto:

NSMutableDictionary *myDictionary = [response.body mutableObjectFromJSONData];

De esta manera, está extrayendo los datos binarios sin procesar y puede evitar algunas conversiones innecesarias (y costosas) de ida y vuelta a cadenas en el proceso. Además, estipulé mutable, porque es probable que desee manipular o jugar con los datos cuando los obtenga ... nuevamente, hay costos involucrados en las conversiones entre objetos mutables y no mutables de las superclases JSONKit ... por lo que al optar por mutable desde el principio, se ahorró algo de tiempo.

Respondido el 19 de Septiembre de 11 a las 01:09

Esos son en realidad NSStrings, simplemente no tienen comillas cuando los imprime en la consola.

Respondido 28 ago 11, 03:08

¿Por qué, por ejemplo, "registar_number" tiene comillas pero el modelo no? - dormitkon

Por lo general, si son solo letras (sin otros símbolos), se mostrará sin comillas. - jtbandes

Gracias por la respuesta. Acabo de editar la pregunta, ¿por qué aparece este error? Este bucle debería funcionar en cualquier NSDictionary con NSStrings - dormitkon

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.