Objective c 解析JSON:检查对象是否存在并读取值
我的应用程序返回一个Objective c 解析JSON:检查对象是否存在并读取值,objective-c,json,cocoa,nsjsonserialization,Objective C,Json,Cocoa,Nsjsonserialization,我的应用程序返回一个NSMutableData*receivedData 我选择使用NSJSONSerialization来解析它,因为我认为这是最简单的。我在想怎么做时遇到了极大的困难。我对Objective-C非常陌生,有Java背景 在Java中,我使用gson将JSON解析到一个数组中,我可以很容易地使用这个数组。我在这里真的很挣扎 我目前解析JSON的代码是: NSError *e = nil; NSArray *jsonArray = [NSJSONSerialization
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<代码>结果和标题
。以下是JSON的外观:
{
"header":{
"session":"sessionid",
"serviceVersion":"1",
"prefetchEnabled":true
},
"result":"50ce82401e826"
}
但是,如果出现错误,JSON也可以如下所示:
{
"header":{
"session":"sessionid",
"serviceVersion":"1",
"prefetchEnabled":true
},
"fault":{
"code":0,
"message":"someErrorCode"
}
}
我希望代码如何工作:
但我一辈子都不知道该怎么做。有人能给我一些指点吗?你的东西好像是一本字典 试试这个
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);
}
请注意,您的
jsonArray
将是NSDictionary
,而不是NSArray
。顺便说一句,这很简单:检查与fault
键对应的对象是否为nil
。是的,从阅读文档中可以看出,所有对象(如header
和fault
)都是NSDictionary
s?然后,result
将是一个NSString
?@jordanmore-Yes,确切地说。NSLog在解析第一个json示例时将“item”打印为纯文本名称,纯文本字符串为“result”和“header”。你知道我怎么把它写进if语句吗?我的尝试一直在尝试,但失败了。。。我希望能够做的是if(item==@“result”){/*do something*/}
,因为您无法理解转换为什么以及JSON解析如何工作。请阅读developer.apple.com上的属性列表编程指南。谢谢,这段代码完美地向我展示了如何实现我需要做的事情:)