首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Mantle在JSON字典中省略空值?

如何使用Mantle在JSON字典中省略空值?
EN

Stack Overflow用户
提问于 2013-09-23 22:18:22
回答 2查看 9.4K关注 0票数 18

我有从MTLModel继承的MyModel (使用GitHub Mantle pod)。MyModel.h

代码语言:javascript
复制
#import <Mantle/Mantle.h>
@interface MyModel : MTLModel <MTLJSONSerializing>
@property (nonatomic, copy, readonly) NSString *UUID;
@property (nonatomic, copy) NSString *someProp;
@property (nonatomic, copy) NSString *anotherProp;
@end

MyModel.m

代码语言:javascript
复制
#import "MyModel.h"
@implementation MyModel
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
        return @{
            @"UUID": @"id",
            @"someProp": @"some_prop",
            @"anotherProp": @"another"
    };
}
}
@end

现在我想使用AFNetworking将JSON发送到后端。在此之前,我将模型实例转换为JSON NSDictionary,以便在我的请求中用作参数/主体有效负载。

代码语言:javascript
复制
NSDictionary *JSON = [MTLJSONAdapter JSONDictionaryFromModel:myModel];

但是这个JSON由奇怪的"“字符串组成,这些字符串表示我的模型的属性为零。相反,我希望Mantle省略这些键/值对,只生成一个只包含非nil或NSNull.null属性的JSON。

EN

回答 2

Stack Overflow用户

发布于 2015-11-12 03:05:43

覆盖- dictionaryValues没有给我提供预期的行为

所以我为MTL基类创建了一个方法

代码语言:javascript
复制
    - (NSDictionary *)nonNullDictionaryWithAdditionalParams:(NSDictionary *)params error:(NSError *)error {
        NSDictionary *allParams = [MTLJSONAdapter JSONDictionaryFromModel:self error: &error];
        NSMutableDictionary *modifiedDictionaryValue = [allParams mutableCopy];

        for (NSString *originalKey in allParams) {
            if ([allParams objectForKey:originalKey] == NSNull.null) {
                [modifiedDictionaryValue removeObjectForKey:originalKey];
            }
        }

        [modifiedDictionaryValue addEntriesFromDictionary:params];
        return [modifiedDictionaryValue copy];
    }
票数 0
EN

Stack Overflow用户

发布于 2015-05-29 06:47:49

EDIT #2曾经适用于我以前的Mantle代码库。现在,我必须执行以下操作才能继续使用EDIT #2:

在文件MTLJSONAdapter.m中,替换以下行:

代码语言:javascript
复制
NSDictionary *dictionaryValue = [model.dictionaryValue dictionaryWithValuesForKeys:propertyKeysToSerialize.allObjects];

使用

代码语言:javascript
复制
NSDictionary *dictionaryValue = model.dictionaryValue;

以上是我目前要解决的问题

代码语言:javascript
复制
{ }

而不是

代码语言:javascript
复制
{
  "AddressLine2" : null,
  "City" : null,
  "ZipCode" : null,
  "State" : null,
  "AddressLine1" : null
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18961622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档