在 Objective-C 中解析 JSON 数组
Posted
技术标签:
【中文标题】在 Objective-C 中解析 JSON 数组【英文标题】:Parse JSON array in Objective-C 【发布时间】:2015-07-09 18:03:49 【问题描述】:我已经设法从一些 json 中提取了以下数组(我将其转储到控制台)。如何获取并打印出其中一个元素的值,即任务?
目标-C:
NSArray *array = [dict objectForKey:@"row"];
NSLog(@"array is: %@",array);
控制台输出:
数组是: 0 = 1; 1 = "发送电子邮件"; 2 = "带附件"; ltask = "带附件"; task = "发送邮件"; 用户 ID = 1;【问题讨论】:
【参考方案1】:array
看起来它实际上是一个NSDictionary
,因此请引用键来获取它的值。
NSLog(@"Task: %@", array[@"task"]);
【讨论】:
上述目标 c 打印出控制台中显示的输出,所以我认为它是有效的。我将如何捕获并打印出任务的价值,即“发送电子邮件”。 我的代码行应该打印出“发送电子邮件”。但是如果你想为它使用一个变量,那么你可以做id value = array[@"task"];
,然后打印value
。
当我在答案中输入代码时,我得到红色错误“在类型'NSArray'的对象上找不到打印字典元素的预期方法”与id值相同的错误
NSArray
将使用括号()
打印到控制台,而NSDictionary
将使用大括号
打印到控制台。控制台输出中的花括号告诉我array
是NSDictionary
。 array
可以吗?如果是这样,那么您将需要使用isKindOfClass:
方法来正确处理不同的类型。
好的。你是对的,它不是一个数组,它是一个字典。但是,我用 NSArray *array = ... 将其称为数组,这似乎是错误的来源。我正在投票您的答案,并接受 Subbu 的以下引起冲突的答案。【参考方案2】:
变量数组似乎不是 NSArray
。这对你有用吗?
id array = [dict objectForKey:@"row"];
if([array isKindOfClass:[NSDictionary class]])
NSLog(@"Value of task %@",array[@"task"]);
【讨论】:
是的,谢谢。解析的原始代码来自不同的 json,它们确实以数组开头,但在这种情况下,它是一个字典。谢谢。【参考方案3】:从日志看来,输出是一个NSDictionary
对象,所以要获取任务键的值,只需这样做
NSDictionary *myDict = dict[@"row"];
NSString *task = myDict[@"task"];
NSLog(@"task = %@", task);
如果您想确认,只需使用isKindOfClass:
方法检查类类型
if([dict[@"row"] isKindOfClass:[NSDictionary class]])
NSDictionary *myDict = dict[@"row"];
NSString *task = myDict[@"task"];
NSLog(@"task = %@", task);
else if([dict[@"row"] isKindOfClass:[NSArray class]])
NSArray *myArray = dict[@"row"];
NSDictionary *myDict = myArray[0];
NSString *task = myDict[@"task"];
NSLog(@"task = %@", task);
【讨论】:
【参考方案4】:试试
if ([[dictionary allKeys] containsObject:@"row"])
NSObject *objRow = dictionary[@"row"];
if(objRow)
if([objRow isKindOfClass:[NSArray class]])
NSArray *arr = (NSArray *)objRow;
....
if([objRow isKindOfClass:[NSDictionary class]])
NSDictionary *dic = (NSDictionary *)objRow;
....
【讨论】:
以上是关于在 Objective-C 中解析 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章