variable una tipo serializar que para matriz manejo generar estructura ejecutar deserializar deserialización desde admite iphone json touchjson

iphone - una - serializar json c#



Deserializar un resultado JSON complejo(matriz de diccionarios) con TouchJSON (5)

En su corazón, JSON trata con los objetos, su código para deserializar debe ser el siguiente

{"objects":[{"id": "123456", "name": "touchjson"}, {"id": "3456", "name": "bleh"}]}

que funciona con la última comprobación.

Hice algunas pruebas con TouchJSON anoche y funcionó bastante bien en general para casos simples. Estoy usando el siguiente código para leer contenido JSON de un archivo y deserializarlo:

NSString *jsonString = [[NSString alloc] initWithContentsOfFile:@"data.json"]; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding]; NSError *error = nil; NSDictionary *items = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error]; NSLog(@"total items: %d", [items count]); NSLog(@"error: %@", [error localizedDescription]);

Eso funciona bien si tengo un objeto JSON muy simple en el archivo (es decir, un diccionario):

{"id": "54354", "name": "boohoo"}

De esta forma pude acceder a la matriz de valores, ya que quería obtener el elemento en función de su índice dentro de la lista:

NSArray *items_list = [items allValues]; NSString *name = [items_list objectAtIndex:1];

(Entiendo que podría haber buscado el nombre con la API de diccionario)

Ahora me gustaría deserializar una cadena JSON semicompleja, que representa una matriz de diccionarios. Un ejemplo de una cadena JSON de este tipo se encuentra a continuación:

[{"id": "123456", "name": "touchjson"}, {"id": "3456", "name": "bleh"}]

Cuando trato de ejecutar el mismo código anterior contra este nuevo contenido en el archivo data.json, no obtengo ningún resultado. Mi llamada NSLog () dice "artículos totales: 0", y no vuelve a aparecer ningún error en el objeto NSError.

¿Alguna pista sobre lo que está pasando? Estoy completamente perdido en qué hacer, ya que no hay mucha documentación disponible para TouchJSON, y mucho menos ejemplos de uso.


Esta no es una respuesta, sino un indicador de un marco diferente:

http://code.google.com/p/json-framework/

Lo he estado usando bastante últimamente, serializando y deserializando estructuras de datos complejas de servicios de terceros como Google Local y entre mi propio código Objective-C y Perl sin ningún problema. Sin mencionar que la API es ridículamente fácil de tratar.

¡Buena suerte!


Soy el autor de TouchJSON.

Su objeto externo debería ser un diccionario y NO una matriz. Cualquier cosa que no sea un diccionario no es legal. Si tiene que tener una matriz como el objeto más externo, entonces use el método (que técnicamente está en desuso, pero que no irá a ningún lado pronto)

- (id)deserialize:(NSData *)inData error:(NSError **)outError;

Consulte: http://www.json.com/json-schema-proposal/ para obtener más información abotu qué es y qué no es JSON legal.


@Mathieu - Creo que esto es lo que estás buscando (6 meses tarde, lo sé :), pero me encontré con el mismo problema)

Copie y pegue desde aquí: http://groups.google.com/group/touchcode-dev/browse_thread/thread/ada885832019f45b

NSArray *tweetsArray = [resultsDictionary objectForKey:@"results"]; for (NSDictionary *tweetDictionary in tweetsArray) { NSString *tweetText = [tweetDictionary objectForKey:@"text"]; [tweets addObject:tweetText]; }

Para dar más contexto, el JSON que estoy analizando está en la forma general
de:

{"results": [ {"text":"tweet1"}, {"text":"tweet2"}, {"text":"tweet3"} ] }