【问题标题】:IOS/Objective-C: JSON response testing for nil and nullIOS/Objective-C:nil 和 null 的 JSON 响应测试
【发布时间】:2019-01-07 03:16:57
【问题描述】:

我收到一些 JSON,其中包含结果、响应,如果查询成功,则成功值为 1。如果查询不成功,则 JSON 中没有成功值。我想做的是测试成功的值 1,但是,我检测到这一点的代码抛出异常。

NSDictionary *jsonResults = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSDictionary *jsonresponse = jsonResults[@"response"];
if (![jsonResults isKindOfClass:[NSNull class]]
    &&![jsonResults[@"response"]isKindOfClass:[NSNull class]]
    &&![jsonResults[@"response"][@"success"]isKindOfClass:[NSNull class]]){
    //CODE BREAKS BEFORE GETTING HERE
    NSLog(@"got here");

这是登录到控制台时失败的 JSON 的样子:

{
    code = 400;
    error = "0(NSNull)";
    response = "Bad Request-No id found";
} 

我将如何设计一个成功的值集的测试,在收到上述内容时不会抛出异常?

提前感谢您的任何建议。

【问题讨论】:

  • 错误是什么,究竟是哪一行导致的?
  • 错误是 LLB 并且发生在以下行: if (![jsonResults isKindOfClass:[NSNull class]]... 因为它是我的 api,我能够通过更改 API 来停止错误响应包含一个成功值(失败为 0),从中似乎对 [jsonResults[@"response"][@"success"] 的引用是导致异常的原因。但是,我仍然不知道为什么对此的引用会导致异常。(我确实尝试过 bt 但无法理解)。
  • 错误不是llb。那是调试器提示。错误将出现在控制台中。
  • 刚刚注意到,NSDictionary *jsonresponse = jsonResults[@"response"]; jsonresponse 不是字典,它是一个字符串。所以你可以试试 NSString *jsonresponse = jsonResults[@"response"];或 NSObject *jsonresponse = jsonResults[@"response"];
  • 你能展示你的 API 调用吗?您是否在 Postman API 中进行过测试?

标签: ios objective-c json null


【解决方案1】:

而不是检查错误字符串或响应,您应该真正检查回复代码(即 400、200 等)。此处提供标准代码列表:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

【讨论】:

  • 即使手动,您也应该使用标准代码。并且基于代码检测错误是要走的路,而不是检测将来可能会改变的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2019-02-19
  • 2022-01-20
  • 2012-04-10
相关资源
最近更新 更多