Actualmente estoy experimentando con el uso de JSON para la transferencia de datos de internet. He tenido éxito en la recepción de una cadena JSON y convertirlo en una NSDictionary, pero no han sido capaces de averiguar cómo convertir un array o un diccionario de objetos en una representación JSON.

He leído varios posts y artículos que explican cómo crear un NSDictionary de pares clave/valor y, a continuación, convertir a JSON, que funciona bien para una matriz simple, pero ¿cómo lograr esto cuando se tiene una matriz o un diccionario de objetos.

Así, por ejemplo, tengo un array de objetos de «contacto», que quisiera transformar en una cadena JSON como tal:

"contacts":{
    "contact":[
    {
        "id":"1"
        "first_name":"john",
        "last_name":"citizen",
        "phone":"9999 9999"
    }
    {
        "id":"1"
        "first_name":"jane",
        "last_name":"doe",
        "phone":"8888 8888"
    }
    ]
 }

Tengo un NSMutableDictionary que es rellenar una lista de objetos de contacto:

    NSMutableDictionary* contactsToBeSynced = [[NSMutableDictionary alloc] init];
    //Populate dictionary with contact objects.
    contactsToBeSynced = self.getNonSynchronisedData;

Yo, el intento de transformar el diccionario de objetos con el NSJSONSerialization método, pero se produce un error.

    NSError* error;
    NSString* jsonString;
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:contactsToBeSynced options:NSJSONWritingPrettyPrinted error:&error];
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

Nadie ha sido capaz de hacer esto? Agradecería mucho alguna ayuda o un punto en la dirección correcta. Saludos.

Es esta para el aprendizaje o no te quieren sólo para hacer las cosas? Porque hay unos 5 buena JSON bibliotecas para Objective-C por ahí.

OriginalEl autor rosst400 | 2012-02-04

4 Comentarios

  1. 5

    Acerca de su estructura – su contactsToBeSynced debe ser de NSDictionary clase, y contact debe ser un NSArray que contiene NSDictionary objetos para diferentes contactos. Por cierto, ¿has probado Kit jsonkit? Es la serialización funciona mejor que el estándar NSJSONSerialization.

    OriginalEl autor Kyr Dunenkoff

  2. 1

    He trabajado…

    He creado un NSArray de contacto de los objetos y el uso de la SBJson marco con SBJsonWriter:

    SBJsonWriter *writer = [[SBJsonWriter alloc] init];
    NSString *jsonString = [writer stringWithObject:arr];

    Tengo una cadena JSON con una lista de contactos.

    OriginalEl autor rosst400

  3. 0

    Comprobar que mi respuesta a la » SBJsonWriter Anidada NSDictionary » pregunta. es ilustrar cómo utilizar correctamente SBJsonWriter.

    Incluye SBJsonWriter de comprobación de error! algunas de las piezas de asesorar acerca de SBJsonWriter comportamiento con NSDate, float, etc..

    Extracto:

    NSDictionary* aNestedObject = [NSDictionary dictionaryWithObjectsAndKeys:
                                          @"nestedStringValue", @"aStringInNestedObject",
                                          [NSNumber numberWithInt:1], @"aNumberInNestedObject",
                                     nil];
    
    NSArray * aJSonArray = [[NSArray alloc] initWithObjects: @"arrayItem1", @"arrayItem2", @"arrayItem3", nil];
    
    NSDictionary * jsonTestDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                         @"stringValue", @"aString",
                                         [NSNumber numberWithInt:1], @"aNumber",
                                         [NSNumber numberWithFloat:1.2345f], @"aFloat",
                                         [[NSDate date] description], @"aDate",
                                         aNestedObject, @"nestedObject",
                                         aJSonArray, @"aJSonArray",
                                         nil];

    OriginalEl autor Pascal

  4. 0

    En general, se escribe una toDictionary método para cada clase, lo que lleva a los campos de interés y los inserta en un diccionario. Para campos numéricos de convertir a NSNumber antes de la inserción. Si alguno de los campos es un objeto, llamar a la toDictionary método en el objeto e insertar el resultado en su diccionario. Si usted tiene una matriz de objetos que se necesita para escribir un bucle, pero no es nada exótico.

    Para revertir la operación de escribir un initWithDictionary método para cada clase.

    OriginalEl autor Hot Licks

Dejar respuesta

Please enter your comment!
Please enter your name here