我正在使用Mantle来解析一些JSON,通常看起来是这样的:
"fields": {
"foobar": 41
}但是,有时foobar的值为空:
"fields": {
"foobar": null
}这会导致MTLValidateAndSetValue在尝试通过键值编码设置nil值时抛出异常。
我想要做的是检测这个空值的存在,并将其替换为-1。
我尝试在我的MTLModel子类中覆盖foobarJSONTransformer,如下所示:
+ (NSValueTransformer *)foobarJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(id inObj) {
if (inObj == [NSNull null]) {
return [NSNumber numberWithInteger: -1];
} else {
return inObj;
}
}];我可以看到这段代码被调用,但是inObj永远不会等于[NSNull null],因此替换不会发生,异常仍然是由...and抛出的。
捕获这种JSON null情况并进行替换的正确方法是什么?
发布于 2014-01-08 16:48:11
我错误地假设将为空JSON值生成NSNull。实际上,它被解析为一个nil值。
因此,解决方案是根据nil而不是NSNull来检查inObj
+ (NSValueTransformer *)foobarJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(id inObj) {
if (inObj == nil) {
return [NSNumber numberWithInteger: -1];
} else {
return inObj;
}
}];然后,替换将按预期工作。
发布于 2014-01-08 16:53:22
如果您接收的是null,它将生成为NSNull。但是,如果他们missed这个字段或将其作为empty发送,它将在解析时生成为nil。所以你最好使用下面的代码
if (inObj == nil || inObj == [NSNull null] )发布于 2016-03-04 18:16:45
创建一个基本模型并继承MTLModel,并覆盖blow代码:
- (void)setNilValueForKey:(NSString *)key {
[self setValue:@0 forKey:key];
}如果你的属性是oc对象,它将是空立即数,并且如果属性是整型、布尔型或浮点型,则不能执行它可以执行的method.but。
https://stackoverflow.com/questions/20990761
复制相似问题