Ios 使用Objective-C解析JSON

Ios 使用Objective-C解析JSON,ios,objective-c,json,parsing,Ios,Objective C,Json,Parsing,我目前正在开发一个用于在iOS上管理约会的应用程序,我是一个初学者,我承认我在解析JSON时遇到了一些困难,我来向您寻求一些帮助:) 以下是我的一小段约会: data{ "Sunday, August 10, 2014" = {         timeslots = (                         {                 id = 1013;                 idPatient = "<nu

我目前正在开发一个用于在iOS上管理约会的应用程序,我是一个初学者,我承认我在解析JSON时遇到了一些困难,我来向您寻求一些帮助:)

以下是我的一小段约会:

data{
         "Sunday, August 10, 2014" = {
            timeslots = (
                            {
                    id = 1013;
                    idPatient = "<null>"
                    status = 0;
                    timeEnd = 5:15 p.m.;
                    timestart = 5:00 p.m;
                }
                            {
                    id = 1045;
                    idPatient = "<null>"
                    status = 0;
                    timeEnd = 5:30 p.m.;
                    timestart = 5:15 p.m.;
                }
            );
        };
        "Sunday, July 13, 2014" = {
            timeslots = (
                            {
                    id = 705;
                    idPatient = "<null>"
                    status = 0;
                    timeEnd = 4:00 P.m;
                    timestart = 3:45 p.m.;
                }
                            {
                    id = 725;
                    idPatient = "<null>"
                    status = 0;
                    timeEnd = 4:15 p.m.;
                    timestart = 4:00 p.m;
                }
                            {
                    id = 745;
                    idPatient = "<null>"
                    status = 0;
                    timeEnd = 4:30 p.m
                    timestart = 4:15 p.m.;
                }
                            {
                    id = 1009;
                    idPatient = "<null>"
                    status = 0;
                    timeEnd = 5:15 p.m.;
                    timestart = 5:00 p.m;
                }
                            {
                    id = 1041;
                    idPatient = "<null>"
                    status = 0;
                    timeEnd = 5:30 p.m.;
                    timestart = 5:15 p.m.;
                }
            );
        }
};
以及错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString allKeys]: unrecognized selector sent to instance 0x8e68010'

提前谢谢你

这是因为时隙在本词典的“2014年8月10日星期日”项下。它的第二层。首先检索“2014年8月10日星期日”字典,然后您将能够访问时隙阵列

修改for循环,如下所示

for (NSDictionary *oneDay in data)
    {
        NSDictionary *dData = [oneDay objectForKey:@"Sunday, August 10, 2014"];
        NSDictionary *tslots = [dData objectForKey:@"timeslots"];
        NSLog(@"%@", tslots); // unrecognized selector sent to instance 0x9b63860

        NSArray *keys = [tslots allKeys];
        for (NSString *key in keys)
        {
            NSLog(@"%@ is %@",key, [oneDay objectForKey:key]);
        }

        [days addObject:oneDay];
    }

您的json响应是错误的。请检查此链接,一旦得到正确的响应,请尝试解析它。工作起来很容易。

for (NSString *oneDayKey in data)
{
    NSDictionary *oneDay = [data objectForKey:oneDayKey];
    NSArray *keys = [oneDay allKeys];
}

如果使用字典,可以同时获得键和对象

[data enumerateKeysAndObjectsUsingBlock:^(id dayKey, id dayDict, BOOL *stop) {
    NSLog(@"%@", dayDict);
}];

@vikingosegundo-乍一看,它似乎是一个有效解析JSON的NSLog转储。(除了初始的“数据”之外,也就是说——不清楚这是一个缺少
=
的键,还是NSLog语句中的一个文本值。)这个转储到底是什么:
NSLog(@“%@”,data)?请给出前30个左右的字符。您从
[oneDay objectForKey:@“timeslots”]
中得到的确切错误是什么?确切的错误是:由于未捕获的异常“NSUnknownKeyException”终止应用程序,原因:“[valueForUndefinedKey:]:该类不符合关键时隙的键值编码。非常感谢!因此,您试图在NSString上使用objectForKey。这是因为在NSDictionary上迭代得到的是键,而不是值。感谢您的快速响应!我已经考虑过你的提议,有一件小事,“2014年8月10日星期日”是可变的,所以我不能把[oneday objectForKey:@“2014年8月10日星期日”];像这样,一个让整个过程充满活力的想法?(对不起,我的英语^^^谷歌翻译:p)for循环应该通过
数据
建立索引,访问每个字典元素。我永远记不起来的一件事是它是获取每个值还是每个键。我考虑的是键,所以需要执行
[data objectForKey:oneDayKey]
或类似操作。执行[oneDay allKeys]它将返回keys数组。现在您可以检索数据[oneDay objectForKey:[KeyArray objectAtIndex:i];它将是dynamic.id响应=[oneDay objectForKey:[KeyArray objectAtIndex:i]];此外,您可以通过if([response isKindOfClass:[NSArray class]])检查返回值的类型,然后进行相应的分析。当我尝试:[oneDay allKeys]时,它返回:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[\unscfString allKeys]:未识别的选择器发送到实例0x8cd7400”。我不知道为什么:|这是NSLog声明的结果。这里的大多数人都习惯了这一点。很明显,由于JSONObjectWithData:parsed解析了某些内容,因此必须在某个地方存在有效的JSON。@gnasher729是的,它的NSLog语句是正确的,但它内部存在一些问题,这就是它在联机JSON解析器中没有显示无错误的方式。首先得到完整的响应,然后你可以说肯定。我只是在你给我的网站上复制/粘贴我的完整json,我没有错误消息..:O@user3771020你能在没有错误的情况下发布完整的json响应吗?是的,我可以,嗯,我只是想澄清一下,当我执行NSLog(@“%@”,data)时,应用程序会很好地返回我的json:D,所以我认为我的json是好的,不?
[data enumerateKeysAndObjectsUsingBlock:^(id dayKey, id dayDict, BOOL *stop) {
    NSLog(@"%@", dayDict);
}];