在 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 将使用大括号 打印到控制台。控制台输出中的花括号告诉我arrayNSDictionaryarray 可以吗?如果是这样,那么您将需要使用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 数组的主要内容,如果未能解决你的问题,请参考以下文章

在objective-c中有效解析单元素JSON

如何在 Objective-C iOS 中解析 JSON

在 Objective-C 中解析 JSON 后的随机结果

在 Objective-C 中解析 JSON 的最漂亮方法?

Json在objective-c中解析nil字段

在Objective-C中解析JSON响应字符串[重复]