web-dev-qa-db-fra.com

Comment créer un NSDictionary avec plusieurs clés?

Je ne suis pas sûr si ce que je vais demander est en fait une NSDictionary avec plusieurs clés, mais d'accord.

Ce que je veux faire, c'est créer une NSDictionary avec des clés et des valeurs pour mes données, puis la convertir au format JSON. Le format JSON ressemblerait exactement à ceci:

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

J'ai seulement utilisé NSDictionaries comme ceci:

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

Mais le format ci-dessus ne concerne pas uniquement la valeur clé. Ma question est donc la suivante: comment la NSDictionary serait-elle adaptée au format JSON ?? Merci d'avoir lu mon post, et désolé si aucune confusion.

6
donparalias

Vous savez que vous pouvez avoir une NSDictionary dans un autre NSDictonary non? 

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"];
34
Rui Peres

Maintenant, avec les littéraux Objective-C, il existe un moyen beaucoup plus efficace, plus simple et plus propre d’y parvenir. Voici votre dictionnaire exact avec cette nouvelle syntaxe:

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"]);
14
Firo

Comment créer NSArray et avec Access pour objet en utilisant NSDictionary?

... Créer NSArray

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

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

... pour accéder à l'objet NSArray à l'aide de NSDictionary

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

Voici la structure:
Votre objet racine est NSMutableDictionary
eventData - clé de l'objet NSMutableDictionary avec clés et objets:
-> clé eventDate objet NSString
-> key eventLocation object NSMutableDictionary avec clés et objets:
----> clé latitude objet NSNumber
----> clé longitude objet NSNumber
-> clé text objet NSString
-> clé imageData objet NSString converti plus tard en NSData
-> clé imageFormat objet NSString
-> clé expirationTime objet NSNumber
type clé de l'objet NSString
title clé de l'objet NSString

1
graver

si vous voulez plusieurs catégories, vous pouvez suivre ce format 

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

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

                             ]
                         };
0
Oshitha Wimalasuriya