给定一个 JSON 对象的 NSArray,如何在 NSDictionary 中存储同一个键的多个值?

Pan*_*ngu 5 json objective-c nsdictionary nsarray ios

我知道不可能为同一个键设置多个值,除非这些值存储在一个数组中。

我有这个称为friMainDicArrayJSON 对象的NSArray :

{
        day = 0;
        "end_time" = "17:30";
        "english_event" = "Lion Dance";
        "english_performer" = "Legendary Group";
        "image_link" = "schedule_miss_vn";
        stage = 0;
        "start_time" = "17:00";
        "viet_event" = "<null>";
        "viet_performer" = "Nh?m Legendary";
    },
        {
        day = 0;
        "end_time" = "18:00";
        "english_event" = Singing;
        "english_performer" = "Ivan Cheong";
        "image_link" = "schedule_miss_vn";
        stage = 0;
        "start_time" = "17:30";
        "viet_event" = "Ca Nh?c";
        "viet_performer" = "Ivan Cheong";
    },
        {
        day = 0;
        "end_time" = "22:00";
        "english_event" = Singing;
        "english_performer" = "Between California and Summer";
        "image_link" = "";
        stage = 0;
        "start_time" = "21:00";
        "viet_event" = "Ca Nh?c";
        "viet_performer" = "";
    },
        {
        day = 0;
        "end_time" = "";
        "english_event" = "End of Day";
        "english_performer" = "";
        "image_link" = "";
        stage = 0;
        "start_time" = "22:00";
        "viet_event" = "";
        "viet_performer" = "";
    },
        {
        day = 0;
        "end_time" = "21:00";
        "english_event" = Music;
        "english_performer" = "DJ Happee From Channel 93.3";
        "image_link" = "";
        stage = 0;
        "start_time" = "20:00";
        "viet_event" = "";
        "viet_performer" = "";
    },
        {
        day = 0;
        "end_time" = "21:00";
        "english_event" = Music;
        "english_performer" = "Adam Cease";
        "image_link" = "";
        stage = 0;
        "start_time" = "20:00";
        "viet_event" = "";
        "viet_performer" = "";
    },
        {
        day = 0;
        "end_time" = "21:00";
        "english_event" = "Ao Dai Fashion Show";
        "english_performer" = "";
        "image_link" = "";
        stage = 0;
        "start_time" = "20:00";
        "viet_event" = "";
        "viet_performer" = "";
    }
}
Run Code Online (Sandbox Code Playgroud)

给定start_time键值,我正在存储每个 JSON 对象,但问题出在20:00键上。我想将 存储20:00为键,将 JSON 对象存储为值。问题是,最后 3 个 JSON 对象包含相同的20:00键,所以我想将这 3 个 JSON 对象存储为 NSArray,并将其设置为20:00键。

我想实现这样的目标:

for (int i = 0; i < [friMainDicArray count]; i++)
{
    [friMainDic setValue:friMainDicArray[i] forKey:[friMainDicArray[i] valueForKey:@"start_time" ] ]
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道检查start_time键是否相同的逻辑,然后将其值添加到同一个键。

有人可以以正确的方式指出我吗?

gab*_*ler 3

我认为你可以循环数组,在 setValueForKey 之前,检查该键是否已经存在,如果是,如果该键的值是 NSDictionary 类型,则将当前值与现有值合并为一个数组,否则值因为该键应该是 NSArray,然后将当前项添加到该数组中。

for (NSDictionary *item in friMainDicArray)
{
    NSString *key = [item valueForKey:@"start_time"];
    if ([friMainDic objectForKey:key]) {
        id value = [friMainDic objectForKey:key];
        if ([value isKindOfClass:[NSArray class]]) {
            NSMutableArray *array = [NSMutableArray arrayWithArray:(NSArray*)value];
            [array addObject:item];
            [friMainDic setValue:array forKey:key];
        } else {
            NSDictionary *dict = (NSDictionary*)value;
            NSArray *array = @[dict,item];
            [friMainDic setValue:array forKey:key];
        }
    } else {
        [friMainDic setValue:item forKey:key];
    }
}
Run Code Online (Sandbox Code Playgroud)