Ios 使用Objective-C解析JSON
我目前正在开发一个用于在iOS上管理约会的应用程序,我是一个初学者,我承认我在解析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
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);
}];