2012-09-06 25 views
14

Necesito enviar un NSArray al servidor en el formato de matriz JSON. ¿Cómo puedo convertirlo a JSON. Esta es una muestra de mi NSArray que tengo que aprobar.Convertir un NSArray de diccionarios a matriz JSON en iOS

array([0] => array('latitude'=>'10.010490', 
        'longitude'=>'76.360779', 
        'altitude'=>'30.833334', 
        'timestamp'=>'11:17:23', 
         'speed'=>'0.00', 
        'distance'=>'0.00'); 

[1] => array('latitude'=>'10.010688', 
      'longitude'=>'76.361378', 
      'altitude'=>'28.546305', 
      'timestamp'=>'11:19:26', 
       'speed'=>'1.614', 
      'distance'=>'198.525711') 
)` 

y el formato requerido es así

[ 
    { "latitude":"10.010490", 
    "longitude":"76.360779", 
    "altitude":"30.833334", 
    "timestamp":"11:17:23", 
     "speed":"0.00", 
    "distance":"0.00" 
    },  
    { 
    "latitude":"10.010688", 
    "longitude":"76.361378", 
    "altitude":"28.546305", 
    "timestamp":"11:19:26", 
     "speed":"1.614", 
    "distance":"198.525711" 
    } 
] 

Cualquiera tiene solución? Gracias por adelantado.

Respuesta

48
NSDictionary *firstJsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"10.010490", @"latitude", 
          @"76.360779", @"longitude", 
          @"30.833334", @"altitude", 
          @"11:17:23", @"timestamp", 
          @"0.00", @"speed", 
          @"0.00", @"distance", 
          nil]; 

    NSDictionary *secondJsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"10.010490", @"latitude", 
          @"76.360779", @"longitude", 
          @"30.833334", @"altitude", 
          @"11:17:23", @"timestamp", 
          @"0.00", @"speed", 
          @"0.00", @"distance", 
          nil]; 

NSMutableArray * arr = [[NSMutableArray alloc] init]; 

[arr addObject:firstJsonDictionary]; 
[arr addObject:secondJsonDictionary]; 

NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error]; 
NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding]; 
NSLog(@"jsonData as string:\n%@", jsonString); 
+0

gracias por la response.it trabaja –

+1

Funciona para mí, pero yo quiero la respuesta en formato de matriz no en formato de cadena. –

+0

inline 'código [ { "latitud": "10.010490", "longitud": "76.360779", "altura": "30.833334", "marca de tiempo": "11:17:23", "velocidad" : "0.00", "distancia": "0.00" }, { "latitud": "10.010688", "longitud": "76.361378", "altura": "28.546305", "marca de tiempo": "11:19:26", "velocidad ":" 1.614 ", " distancia ":" 198.525711 " } ] 'lo obtendrá en formato de matriz solamente – prashant

4

Recomendaría el SBJson-Framework.

La conversión de una NSMutableArray es tan simple como NSString *jsonString = [yourArray JSONRepresentation];

Editar: Jack Farnandish es correcto u tiene que transformarlo en un NSDictionary antes de poder convertirlo a JSON. En mi ejemplo, NSMutableArray debe contener el Diccionario. La matriz solo es necesaria para crear los corchetes al principio y al final de la cadena.

+0

gracias por su respuesta –

2

En primer lugar, debe cambiar a estructurar en NSDictionary clase y NSArray contiene NSDictionary objetos, a continuación, tratar JSONKit en IOS 5 serialización funciona mejor que el estándar NSJSONSerialization.

+0

gracias por su respuesta –

2
#import <JSONKit/JSON.h> 

NSArray *array = // Your array here. 
NSString *json = [array JSONString]; 

NSLog(@"%@", json); 

JSONKit realiza significativamente mejor que SBJson y otros en mi propia y los puntos de referencia del autor.

+0

gracias por la respuesta –

1

¿El servicio al que llamas un servicio RESTful?

Si es así, recomiendo usar RestKit. Hace objeto de serialización/deserialización. También maneja todas las bases de redes. Extremadamente valioso y bien mantenido.

+0

gracias por la respuesta –

+0

Usar el marco para una tarea tan simple no es realmente una buena idea. Actualización 2016 RestKit es ya no es un marco mantenido. – brainray

2

Comprobar this tutorial, JSON en iOS 5.0 se explicó claramente (serialización, deserailización).

3

El enfoque más simple y mejor !!!

Para convertir NSArray o NSMutableArray en jsonString, primero puede convertirlo a NSData y luego convertirlo en NSString. Use este código

NSData* data = [ NSJSONSerialization dataWithJSONObject:yourArray options:NSJSONWritingPrettyPrinted error:nil ]; 
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

Me ayudó y espero que le ayude también. Todo lo mejor.

+0

Esta es la respuesta correcta al título de la pregunta. Gracias. La respuesta aceptada muestra una variedad de diccionarios – brainray

Cuestiones relacionadas