Objective c 解析JSON数据目标C时出错
我正在尝试同步数据,在数据同步后,我从服务器收到一条消息。现在我想显示这个消息。但我在解析它时出错了。下面是我的代码Objective c 解析JSON数据目标C时出错,objective-c,json,Objective C,Json,我正在尝试同步数据,在数据同步后,我从服务器收到一条消息。现在我想显示这个消息。但我在解析它时出错了。下面是我的代码 - (void)connection:(NSURLConnection *)connection didReceiveData:data{ NSLog(@"ConnectionDidReceiveData"); NSString *strdata=[[NSString alloc]initWithData:data encoding:NSASCIIStringEnc
- (void)connection:(NSURLConnection *)connection didReceiveData:data{
NSLog(@"ConnectionDidReceiveData");
NSString *strdata=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"Data as received =%@",strdata);
if(strdata.length>2)
{
SBJSON *jsonparser=[[[SBJSON alloc]init]autorelease];
NSDictionary *res= [jsonparser objectWithString:strdata];
NSLog(@"res = %@",res);
NSArray *syncMessage = [res objectForKey:@"synchData"];
NSLog(@"syncMessage = %@",syncMessage);
// NSDictionary *dict = [syncMessage objectAtIndex:2];
// NSLog(@"message = %@",[dict objectForKey:@"message"]);
for (NSDictionary *result in syncMessage) {
NSLog(@"result = %@",[result objectForKey:@"message"]); **<---- Error Occurs Here.**
// NSString *message = [result objectForKey:@"message"];
//NSLog(@"Message=%@",message);
}
}
}
请帮忙
现在同样的代码也适用于这个JSON,有什么问题吗?我的res变量为空
{"synchData":{"message":"DCR Sync successful","code":1,"date":"2013-11-24"}}
第一步
请使用
您的JSON似乎无效
步骤2
打印同步消息
nslog(@"syncMessage:%@",syncMessage);
代码解析中存在问题。
这是您的JSON数据
{
synchData = {
code = 0;
fromdate = "-0-";
message = "You have exceeded your leave count";
todate = "-0-";
};
}
synchData不是数组,而是它的字典,您正在将字典设置为数组,这就是问题所在
所以我认为问题出在这段代码之后
NSArray *syncMessage = [res objectForKey:@"synchData"];
NSLog(@"syncMessage = %@",syncMessage);
// NSDictionary *dict = [syncMessage objectAtIndex:2];
// NSLog(@"message = %@",[dict objectForKey:@"message"]);
for (NSDictionary *result in syncMessage) {
NSLog(@"result = %@",[result objectForKey:@"message"]); **<---- Error Occurs Here.**
// NSString *message = [result objectForKey:@"message"];
//NSLog(@"Message=%@",message);
}
}
返回的值不是数组,而是NSDictionary
NSDictionary *returnDataDict = [res objectForKey:@"synchData"];
NSLog(@"result = %@",[returnDataDict objectForKey:@"message"]);
这将足以获得响应显示您的json响应
[\uu NSCFString objectForKey:][/code>此代码表明响应是字符串而不是字典,这是我编辑的错误qustion@Dilip,我看到了,但当我把它当作普通字符串时,它告诉我这是一个NSDictionary。你能显示res
和strdata
和syncMessage
的日志吗。。。你的方法奏效了。到底出了什么问题?正如我告诉过你的,你正在将dictionary对象赋给数组。我刚把它改成字典。@凯恩:怎么会是一本?queston只有一个直接答案,谁写的正确答案都是一样的。而且不需要复制这样一个简单的直接答案。答案是一样的,dilip已经在你回答之前3分钟给出了答案。只是说冷静点,不要否决投票你的答案。@Kane我写这个答案的时候它不在那里。请建议一种“不同的方式”来写这个答案。
NSArray *syncMessage = [res objectForKey:@"synchData"];
NSLog(@"syncMessage = %@",syncMessage);
// NSDictionary *dict = [syncMessage objectAtIndex:2];
// NSLog(@"message = %@",[dict objectForKey:@"message"]);
for (NSDictionary *result in syncMessage) {
NSLog(@"result = %@",[result objectForKey:@"message"]); **<---- Error Occurs Here.**
// NSString *message = [result objectForKey:@"message"];
//NSLog(@"Message=%@",message);
}
}
NSDictionary *syncMessage = [res objectForKey:@"synchData"];
NSLog(@"result = %@",[syncMessage objectForKey:@"message"]);
NSDictionary *returnDataDict = [res objectForKey:@"synchData"];
NSLog(@"result = %@",[returnDataDict objectForKey:@"message"]);