我的应用程序返回NSMutableData *receivedData
。
我选择使用NSJSONSerialization来解析它,假设它是最简单的。我在试图弄清楚如何做到这一点时遇到了极大的麻烦。我是Objective-C的新手,来自Java背景。
在Java中,我使用gson将JSON解析为一个我可以轻松使用的数组。我在这里真的很挣扎。
我目前解析JSON的代码是:
NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e];
if (!jsonArray) {
NSLog(@"Error parsing JSON: %@", e);
} else {
for(NSDictionary *item in jsonArray) {
NSLog(@"Item: %@", item);
}
}
由互联网上的某人提供。这适用于NSLog打印两个项目。 result
和header
。以下是JSON的外观:
{
"header":{
"session":"sessionid",
"serviceVersion":"1",
"prefetchEnabled":true
},
"result":"50ce82401e826"
}
但是如果出现错误,JSON也可能如下所示:
{
"header":{
"session":"sessionid",
"serviceVersion":"1",
"prefetchEnabled":true
},
"fault":{
"code":0,
"message":"someErrorCode"
}
}
我希望代码如何工作:
但我不能为我的生活弄清楚如何接近它。有人可以给我一些指示吗?
答案 0 :(得分:0)
您的对象似乎是字典。
试试这个。
NSError *e = nil;
id jsonObj = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e];
NSArray *jsonArray = nil;
NSDictionary *jsonDict = nil;
if ([jsonObj isKindOfClass:[NSArray class]]){
jsonArray = (NSArray*)jsonObj;
}
else if ([jsonObj isKindOfClass:[NSDictionary class]]){
jsonDict = (NSDictionary*)jsonObj;
}
if (jsonArray != nil) {
// you have an array;
for(NSDictionary *item in jsonArray) {
NSLog(@"Item: %@", item);
}
}
else if (jsonDict != nil){
for (NSString *key in jsonDict.allKeys){
NSLog(@"Key: %@ forItem: %@",key,[jsonDict valueForKey:key]);
}
}
else {
NSLog(@"Error: %@",e);
}