2012-06-26 21 views
5

No estoy seguro de si lo que voy a preguntar es en realidad un NSDictionary con varias teclas, pero está bien.¿Cómo crear un NSDictionary con múltiples claves?

Lo que quiero hacer es crear un NSDictionary con claves y valores para mis datos y luego convertirlo al formato JSON. El formato JSON se vería exactamente así:

{ 
    "eventData": { 
     "eventDate": "Jun 13, 2012 12:00:00 AM", 
     "eventLocation": { 
      "latitude": 43.93838383, 
      "longitude": -3.46 
     }, 
     "text": "hjhj", 
     "imageData": "raw data", 
     "imageFormat": "JPEG", 
     "expirationTime": 1339538400000 
    }, 
    "type": "ELDIARIOMONTANES", 
    "title": "accIDENTE" 
} 

Yo sólo he utilizado NSDictionaries así:

NSArray *keys = [NSArray arrayWithObjects:@"eventDate", @"eventLocation", @"latitude" nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil]; 
dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

Pero el formato anterior no tiene que ver con clave - valor. Entonces mi pregunta es ¿cómo sería el NSDictionary, para ajustarse al formato JSON? Gracias por leer mi publicación, y lo siento si hay alguna confusión.

Respuesta

32

Usted sabe que puede tener un NSDictionary dentro de otra NSDictonary ¿verdad?

NSDictionary *eventLocation = [NSDictionary dictionaryWithObjectsAndKeys:@"43.93838383",@"latitude",@"-3.46",@"latitude", nil]; 

NSMutableDictionary *eventData = [NSDictionary dictionaryWithObjectsAndKeys:eventLocation,@"eventLocation", nil]; 
[eventData setObject:@"Jun 13, 2012 12:00:00 AM" forKey:@"eventDate"]; 
[eventData setObject:@"hjhj" forKey:@"text"]; 
. 
. 
. 
NSMutableDictionary *finalDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:eventData,@"eventData", nil]; 
[finalDictionary setObject:@"ELDIARIOMONTANES" forKey:@"type"]; 
[finalDictionary setObject:@"accIDENTE" forKey:@"title"]; 
+0

Has perdido una coma entre @ "latitude" y nil. – DarkMoon

1

Aquí está la estructura:
Su objeto raíz es NSMutableDictionary
eventData - clave para el objeto NSMutableDictionary con las llaves y objetos:
-> clave eventDate objeto NSString
-> clave eventLocation objeto NSMutableDictionary con las llaves y objetos:
----> clave latitude objeto NSNumber
----> clave longitude objeto NSNumber
-> clave text objeto NSString
-> clave imageData objeto NSString después convertido a NSData
-> clave imageFormat objeto NSString
-> clave expirationTime objeto NSNumber
type clave para objeto NSString
title clave para objeto NSString

+0

que se ve muy bien, pero usted me podría ayudar con la causa de sintaxis obj-c soy muy nuevo en esto? – donparalias

+0

Para futuras referencias, utilice una estructura más grave, mientras tanto puede usar el código que publiqué. – Peres

+0

Sí, eche un vistazo al código de @ JackyBoy – graver

13

Ahora con literales Objective-C hay una forma mucho mejor, más fácil y más limpia de lograr esto. Aquí es su diccionario exacta con esta nueva sintaxis:

NSDictionary *dictionary = @{ 
    @"eventData": @{ 
     @"eventDate": @"Jun 13, 2012 12:00:00 AM", 
     @"eventLocation": @{ 
      @"latitude": @43.93838383, 
      @"longitude": @-3.46 
     }, 
     @"text": @"hjhj", 
     @"imageData": @"raw data", 
     @"imageFormat": @"JPEG", 
     @"expirationTime": @1339538400000 
    }, 
    @"type": @"ELDIARIOMONTANES", 
    @"title": @"accIDENTE" 
}; 

// Prints: "43.93838383" 
NSLog(@"%@", dictionary[@"eventData"][@"eventLocation"][@"latitude"]); 
2

Cómo crear NSArray y con acceso por objeto utilizando NSDictionary?

... Crea NSArray

NSArray *studentkeys = [NSArray arrayWithObjects:@"studentName", @"studentBirthDate", @"studentCity", @"studentMobile" nil]; 

NSArray *objects = [NSArray arrayWithObjects:@"Pravin", @"27/08/1990", @"Bhavnagar",@"7878007531", nil]; 

...para tener acceso a NSArray objetos Usando NSDictionary

NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];         
0

si quieres múltiples categorías, se puede seguir el siguiente formato

NSDictionary *jsonObject = @{ 
          @"data1":@[ 
           @{ 
           @"title":@"A" 

           @"subData" : @[ 
           @{ 
            @"title":@"aa" 
           }] 
           } 

          ] 
         }; 
+0

Agregue una explicación a su código –

+0

Si desea administrar varias categorías con NSDictionary, puede seguir este formato –

Cuestiones relacionadas