ios – 在Mantle中替换JSON空值

前端之家收集整理的这篇文章主要介绍了ios – 在Mantle中替换JSON空值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用Mantle来解析一些通常看起来像这样的 JSON
"fields": {

      "foobar": 41
    }

但是有时foobar的值为null:

"fields": {

      "foobar": null
    }

这导致MTLValidateAndSetValue抛出异常,因为它试图通过键值编码设置一个零值.

我想做的是检测这个空值的存在并将其替换为-1.

我尝试在我的MTLModel子类中覆盖foobarJSONTransformer,如下所示:

+ (NSValueTransformer *)foobarJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(id inObj) {
    if (inObj == [NSNull null]) {
        return [NSNumber numberWithInteger: -1];
    } else {
        return inObj;
    }
}];

…和我可以看到这个代码调用,但是在Obj永远不等于[NSNull null],因此替换不会发生,异常仍然被Mantle抛出.

什么是正确的方式来捕获这个JSON null的情况,并做替换?

解决方法

错误地假设NSNull将生成一个空的JSON值.实际上它被解析为零值.

所以解决方案是检查obj对nil,而不是NSNull:

+ (NSValueTransformer *)foobarJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(id inObj) {
    if (inObj == nil) {
        return [NSNumber numberWithInteger: -1];
    } else {
        return inObj;
    }
}];

替换将按预期工作.

猜你在找的iOS相关文章