如何检查传入的 JSON 提要是不是包含单条记录或多条记录?

Posted

技术标签:

【中文标题】如何检查传入的 JSON 提要是不是包含单条记录或多条记录?【英文标题】:How to check that the incoming JSON feed contains a single record or multiple?如何检查传入的 JSON 提要是否包含单条记录或多条记录? 【发布时间】:2012-12-05 06:51:19 【问题描述】:

我必须在 ios 上解析这个 JSON。


"log_by_dates": 
    "logs": [
        
            "date": "Wednesday 5 December 2012",
            "exercises": "0",
            "workouts": "0",
            "log_entries": "0"
        ,
        
            "date": "Tuesday 4 December 2012",
            "exercises": "4",
            "workouts": "2",
            "log_entries": "7"
        
    ]
 

我已经编写了以下代码来解析它;

NSArray *logs = [[(NSDictionary*)results objectForKey:@"log_by_dates"] objectForKey:@"logs"];
        for (NSDictionary *aLog in logs) 
            Log *newLog = [[Log alloc] initWithDate:[aLog objectForKey:@"date"]               withExercises:[aLog objectForKey:@"exercises"]
                                       withWorkouts:[aLog objectForKey:@"workouts"]];
            if (!data) 
               data = [[NSMutableArray alloc] init];
            

但问题是,有时我会得到这样的 JSON 值;



"log_by_dates": 
    "logs":
        
            "date": "Wednesday 5 December 2012",
            "exercises": "0",
            "workouts": "0",
            "log_entries": "0"
        
  
 

这让我的代码崩溃了。

请指导我,我在解析之前使用 if() else 条件来检查传入的 JSON 对象是否包含单个记录的多个记录,以便我编写适当的代码来处理字典或数组。 谢谢,

【问题讨论】:

它是如何崩溃的,错误信息是什么? 【参考方案1】:

请像这样更新您的代码。

NSArray *logs = [[(NSDictionary*)results objectForKey:@"log_by_dates"] objectForKey:@"logs"];
if([logs isKindOfClass:[NSArray class]]) 
    for (NSDictionary *aLog in logs) 
        Log *newLog = [[Log alloc] initWithDate:[aLog objectForKey:@"date"]               withExercises:[aLog objectForKey:@"exercises"]
                                   withWorkouts:[aLog objectForKey:@"workouts"]];
        if (!data) 
            data = [[NSMutableArray alloc] init];
        
    

else if([logs isKindOfClass:[NSDictionary class]]) 
    NSDictionary *aLog = (NSDictionary *)logs;
    Log *newLog = [[Log alloc] initWithDate:[aLog objectForKey:@"date"]               withExercises:[aLog objectForKey:@"exercises"]
                               withWorkouts:[aLog objectForKey:@"workouts"]];
    if (!data) 
        data = [[NSMutableArray alloc] init];
    

【讨论】:

【参考方案2】:

检查条件

if([[[(NSDictionary*)results objectForKey:@"log_by_dates"] objectForKey:@"logs"] isKindOfClass:[NSArray class]])

    // Do your Array Stuff Here
 else 
    // Do your Dictionary Stuff Here

【讨论】:

【参考方案3】:

for 循环之前插入:

if (![logs isKindOfClass:[NSArray class]])

    logs = [NSArray arrayWithObject:logs];

【讨论】:

以上是关于如何检查传入的 JSON 提要是不是包含单条记录或多条记录?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何格式化带有部分的 UITableView 的传入 JSON

如何获取带有图像和视频以及文本的 facebook 提要?

如何检查 JSON 对象数组是不是包含数组中定义的值?

如何检查 json 是不是包含 JavaScript 中的值?

如何检查 json 对象是不是包含 <null>?

如何检查 MySQL JSON 列是不是包含 laravel 中的值?