【问题标题】:How to create an NSDictionary with multiple keys?如何创建具有多个键的 NSDictionary?
【发布时间】:2012-06-26 11:05:57
【问题描述】:

我不确定我要问的实际上是不是带有多个键的NSDictionary,但可以。

我想要做的是为我的数据创建一个带有键和值的NSDictionary,然后将其转换为JSON 格式。 JSON 格式看起来就像这样:

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

我只像这样使用过NSDictionaries:

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

但是上面的格式不全是key-value。 所以我的问题是 NSDictionary 将如何适应 JSON 格式? 感谢您阅读我的帖子,如有任何困惑,请见谅。

【问题讨论】:

    标签: ios objective-c json key nsdictionary


    【解决方案1】:

    您可以在另一个NSDictonary 中使用NSDictionary:

    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"];
    

    【讨论】:

    • 你在@"latitude" 和 nil 之间漏掉了一个逗号。
    【解决方案2】:

    现在有了 Objective-C 文字,有一种更好、更简单、更简洁的方式来实现这一点。这是您使用这种新语法的准确字典:

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

    【讨论】:

      【解决方案3】:

      如何使用 NSDictionary 创建 NSArray 和访问对象?

      ...创建 NSArray

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

      ...使用 NSDictionary 访问 NSArray 对象

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

      【讨论】:

        【解决方案4】:

        结构如下:
        您的根对象是 NSMutableDictionary
        eventData - 对象 NSMutableDictionary 的键和键:
        ->键eventDate对象NSString
        ->key eventLocation object NSMutableDictionary 带有键和对象:
        ---->键latitude对象NSNumber
        ---->键longitude对象NSNumber
        -> 键text 对象NSString
        -> 键imageData 对象NSString 后来转换为NSData
        -> 键imageFormat 对象NSString
        -> 键 expirationTime 对象 NSNumber
        type 对象键 NSString
        title 对象键 NSString

        【讨论】:

        • 看起来不错,但你能帮我了解一下 obj-c 语法吗?因为我对这个很陌生?
        • 为了以后参考,使用graver结构,同时你可以使用我发布的代码。
        • @Jacky Boy 非常感谢您的回答。我认为grager的结构更具可读性和可理解性。编辑你的答案并在你的答案之后发布这个结构(我的意思是 obj 语法)是否容易两者兼而有之?
        • @donparalias 我不认为这是非常“道德”的事情。 :)
        • 为什么不呢?我的意思是你们中的任何人,我只是因为你们在这里才问你们。仅供日后参考!如果可以的话,我会接受这两个答案,但我当然非常感谢你们!
        【解决方案5】:

        如果你想要多个类别,你可以按照这个格式

        NSDictionary *jsonObject = @{
                                   @"data1":@[
                                      @{
                                        @"title":@"A"
        
                                        @"subData" : @[
                                        @{
                                          @"title":@"aa"
                                         }]
                                        }
        
                                     ]
                                 };
        

        【讨论】:

        • 如果你想使用 NSDictionary 管理多个分类,你可以按照这个格式来
        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 2010-12-08
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        相关资源
        最近更新 更多