gpt4 book ai didi

IOS:从 JSON 中检测 NSNull 不起作用

转载 作者:行者123 更新时间:2023-11-28 21:27:38 31 4
gpt4 key购买 nike

以下代码旨在捕获 Json 结果中的 NSNull,当响应为 null 时抛出异常。

 NSDictionary *jsonResults = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"jsonResults are:%@",jsonResults);
if (![jsonResults isKindOfClass:[NSNull class]]&&!
[jsonResults[@"response"][@"insert_id"]isKindOfClass:[NSNull class]]&&!
(jsonResults==nil)){
//do something
}

当异常发生时,以 if (![json... 开头的行是绿色的,错误信息是:

     Results: {
code = 400;
response = "0(NSNull)";
}
2016-05-26 07:18:06.327 idaru[385:60b] -[NSNull
objectForKeyedSubscript:]: unrecognized selector sent to instance
0x38871a70
2016-05-26 07:18:06.329 myapp[385:60b] *** Terminating app due to
uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull
objectForKeyedSubscript:]: unrecognized selector sent to instance
0x38871a70'

谁能指出这里可能出了什么问题?

值得注意的是,我确实有一个类别可以将 NSNulls 转换为 0。不确定这与上面的交互方式如何,但在这里:

//NSNull+JSON.m
@implementation NSNull (JSON)

- (NSUInteger)length { return 0; }

- (NSInteger)integerValue { return 0; };

- (float)floatValue { return 0; };

- (NSString *)description { return @"0(NSNull)"; }

- (NSArray *)componentsSeparatedByString:(NSString *)separator { return @[]; }

- (id)objectForKey:(id)key { return nil; }

- (BOOL)boolValue { return NO; }

@end

最佳答案

您没有检查 response 是否为 NSNull。我的方法是测试你想要什么,而不是你不想要什么:

NSDictionary *jsonResults = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
if (jsonResults) { // This won't be NSNull, it will be nil on error
NSDictionary *response = jsonResults[@"response"];
if ([response isKindOfClass:[NSDictionary class]]) {
NSNumber *insertId = response[@"insert_id"]; // Assumption
if ([insertId isKindOfClass:[NSNumber class]]) {
// Print value
}
}
} else {
// Report error
}

实际上,您需要知道哪些值是可选的以及哪些值可以是不同的类型,因为您不想使用 isKindOfClass 对整个模块进行编码。

关于IOS:从 JSON 中检测 NSNull 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459560/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com