我创建了一个WCF服务,它为我的POST操作提供以下响应:
"[{\"Id\":1,\"Name\":\"Michael\"},{\"Id\":2,\"Name\":\"John\"}]"
我对JSONObjectWithData的调用没有返回任何错误,但是我无法枚举结果,我做错了什么?
NSError *jsonParsingError = nil;
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
NSLog(@"jsonList: %@", jsonArray);
if(!jsonArray)
{
NSLog(@"Error parsing JSON:%@", jsonParsingError);
}
else
{
// Exception thrown here.
for(NSDictionary *item in jsonArray)
{
NSLog(@"%@", item);
}
}
答案 0 :(得分:3)
可能的原因是您使用的是错误的基础对象。尝试将NSMutableArray更改为NSDictonary。
发件人:强>
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
要强>
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
答案 1 :(得分:3)
正如Jeremy指出的那样,你不应该逃避JSON数据中的引号。但是,你已经引用了返回字符串。这使它成为一个JSON字符串,而不是一个对象,所以当你解码它时你有一个字符串,而不是一个可变数组,这就是为什么当你试图快速迭代时你得到一个错误......你不能快速迭代字符串。
您的实际JSON应如下所示:[{"Id":1,"Name":"Michael"},{"Id":2,"Name":"John"}]
。没有报价,没有逃脱。一旦消除了JSON对象周围的引号,您的应用程序就不会再崩溃,但是对于格式错误的数据(转义),您将获得JSON反序列化错误。
答案 2 :(得分:0)
使用NSJSONSerialization进行解析很容易,但我还创建了一个小框架,允许将JSON值直接解析为类对象,而不是处理字典。看一看,它可能会有所帮助: https://github.com/mobiletoly/icjson