2012-06-26 7 views
5

Non sono sicuro se quello che sto per chiedere è in realtà un NSDictionary con più chiavi, ma ok.Come creare un NSDictionary con più chiavi?

Quello che voglio fare è creare un NSDictionary con chiavi e valori per i miei dati e quindi convertirlo nel formato JSON. Il formato JSON apparirebbe esattamente come questo:

{ 
    "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" 
} 

io ho usato solo NSDictionaries come questo:

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

Ma il formato di cui sopra non è tutto su chiave - valore. Quindi la mia domanda è: come dovrebbe essere il NSDictionary, per adattarsi al formato JSON ?? Grazie per aver letto il mio post, e scusa se c'è qualche confusione.

risposta

32

Sai che puoi avere un NSDictionary all'interno di un altro NSDictonary giusto?

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

Hai perso una virgola tra @ "latitudine" e zero. – DarkMoon

1

Ecco la struttura:
vostro oggetto principale è NSMutableDictionary
eventData - chiave per oggetto NSMutableDictionary con i tasti e gli oggetti:
-> tasto eventDate oggetto NSString
-> tasto eventLocation oggetto NSMutableDictionary con i tasti e gli oggetti:
----> chiave latitude oggetto NSNumber
----> chiave longitude oggetto NSNumber
-> tasto text oggetto NSString
-> tasto imageData oggetto NSString poi convertito in NSData
-> tasto imageFormat oggetto NSString
-> tasto expirationTime oggetto NSNumber
type chiave per oggetto NSString
title chiave per oggetto NSString

+0

che sembra grande, ma mi potrebbe aiutare con la causa della sintassi obj-c io sono molto nuovo a questo? – donparalias

+0

Per riferimento futuro, utilizzare la struttura Graver, nel frattempo è possibile utilizzare il codice che ho postato. – Peres

+0

Sì, dai un'occhiata al codice @ JackyBoy – graver

13

Ora con i letterali Objective-C c'è un modo molto migliore, più facile e più pulito per realizzare questo. Ecco il dizionario esatto con questa nuova sintassi:

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

Come creare NSArray e con Accesso per oggetto utilizzando NSDictionary?

... Crea NSArray

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

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

...per accedere a NSArray oggetto utilizzando NSDictionary

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

se si vuole più categorie, è possibile seguire questo formato

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

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

          ] 
         }; 
+0

per favore aggiungi una spiegazione al tuo codice –

+0

se vuoi gestire più categorie usando NSDictionary, puoi seguire questo formato –