我正在尝试使用以下代码对NSDictionary进行排序:

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:&err];
for (NSDictionary* lesson in jsonDict[@"data"][@"lessons"]) {
    data[lesson[@"day"]][lesson[@"index"]][@"title"] = lesson[@"title"];
}


如果我记录lesson[@"day"]的值,依此类推,则这些值似乎正确。不知何故,如果我在循环后登录data[@"1"][@"1"],它只是空的。因此,问题似乎在于将值设置为NSDictionary数据。

原始JSON字符串包含一个包含所有课程的列表。为了正确访问它们,我想使用以下格式的新NSDictionary:data [day] [index] [field]

JSON代码如下所示:

{"status":"success","data":{"lessons":[{"id":1,"index":"1","day":"1","title":"Mathe","teacher":"Mr. xyz","room":"103","ind":"1"},{"id":2,"index":"1","day":"2","title":"Physik","teacher":"Mr xyz","room":"PH4","ind":"1"},...

最佳答案

问题是(我认为)

data[lesson[@"day"]][lesson[@"index"]][@"title"] = lesson[@"title"];


不会自动创建中间词典

data[lesson[@"day"]]
data[lesson[@"day"]][lesson[@"index"]]


您必须先检查它们是否存在,如果还不存在,则分配一个可变字典
存在。 (与Perl哈希一样,没有Autovivification!)类似:

if (data[lesson[@"day"]] == nil) {
    data[lesson[@"day"]] = [NSMutableDictionary dictionary];
}
if (data[lesson[@"day"]][lesson[@"index"]] == nil) {
    data[lesson[@"day"]][lesson[@"index"]] = [NSMutableDictionary dictionary];
}
data[lesson[@"day"]][lesson[@"index"]][@"title"] = lesson[@"title"];




完整的工作代码:

NSString *str = @"{\"status\":\"success\",\"data\":{\"lessons\":[{\"id\":1,\"index\":\"1\",\"day\":\"1\",\"title\":\"Mathe\",\"teacher\":\"Mr. xyz\",\"room\":\"103\",\"ind\":\"1\"},{\"id\":2,\"index\":\"1\",\"day\":\"2\",\"title\":\"Physik\",\"teacher\":\"Mr xyz\",\"room\":\"PH4\",\"ind\":\"1\"}]}}";
NSError *err;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:&err];
NSMutableDictionary *data = [NSMutableDictionary dictionary];

for (NSDictionary* lesson in jsonDict[@"data"][@"lessons"]) {
    if (data[lesson[@"day"]] == nil) {
        data[lesson[@"day"]] = [NSMutableDictionary dictionary];
    }
    if (data[lesson[@"day"]][lesson[@"index"]] == nil) {
        data[lesson[@"day"]][lesson[@"index"]] = [NSMutableDictionary dictionary];
    }
    data[lesson[@"day"]][lesson[@"index"]][@"title"] = lesson[@"title"];
}
NSLog(@"%@", data);


输出:

{
    1 = {
        1 = {
            标题= Mathe;
        };
    };
    2 = {
        1 = {
            标题= Physik;
        };
    };
}

10-08 07:48
查看更多