2016-03-08 142 views
0

下面是该场景;我有一个来自API的JSON响应。我获得了API的响应如下:检查JSON密钥是否存在

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://apitest.maranatha.org/api/SiteGroupStagings?countryId=%i",[country getCountryID]]]]; 
[request setHTTPMethod:@"GET"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:token forHTTPHeaderField:@"Token"]; 


NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil]; 

if (returnData) { 
    NSDictionary* jsonResponse = [NSJSONSerialization 
            JSONObjectWithData:returnData          options:NSJSONReadingMutableContainers 
            error:&error]; 
} 

的API将返回对象的JSON数组时的API调用是正确的,返回的是这样的:

[ 
{}, 
{}, 
... 
] 

如果有任何问题的处理在服务器侧(比缺乏在客户端因特网连接的其他)请求,从API响应是如下:

{ 
"message": "In lorem ipsum" 
}  

我要检查,如果该键/值Pa ir是否存在,以便能够提醒用户,而不是尝试处理会导致发生异常的响应。 我已经尝试了以下方法,但它似乎不工作,它似乎总是可以找到消息键,即使JSON响应是对象数组。

if ([jsonResponse valueForKey:@"message"]) { 
     NSLog(@"%@", [jsonResponse valueForKey:@"message"]); 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                 message:[jsonResponse valueForKey:@"message"] 
                 delegate:self 
               cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
     [alert show]; 


    } 
    else { 
    //consume the JSON response 
    } 

如何成功检查来自API的响应是否包含消息键/值对?

+0

U可以简单地做,如果(JSON [@“消息”]) –

回答

0

感谢@fullofsquirrels我了解如何解决问题。

如果一个JSON是一个JSON数组,那么[NSJSONSerialization]将使它成为一个NSArray,所以最简单的方法是检查我的响应是否是一个数组,或者如果它不是。这是我的解决方案。

if (![jsonResponse isKindOfClass:[NSArray class]]) { 
     NSLog(@"%@", [jsonResponse valueForKey:@"message"]); 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                 message:[jsonResponse valueForKey:@"message"] 
                 delegate:self 
               cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
     [alert show]; 


    } 
else { 
     //consume API 
} 
0

听起来像你的服务器API返回JSON实体的成功请求的关键“消息”,是否正确?如果是这样的话,也许试试这个:

if (jsonResponse[@"message"] && 
    [jsonResponse[@"message"] isKindOfClass:[NSString class]] && 
    [jsonResponse[@"message"] isEqualToString:@"In lorem ipsum"]) 
{ 
    // Alert 
} 

这应该给你更好的(但不一定完成),对运行时间方差保护的JSON实体的内容作为一个整体。

+0

我检查API响应,并出现一条消息,键/值唯一的一次,就是当有一些wron –