0

我目前正在尝试简化我的 Obj-C 模型,但似乎 json 数据使它比我想象的要复杂一些。我无法将数组数据转换为一些布尔值。

据我所知,不可能使用框架JSONKeyPathsByPropertyKey来定义密钥是这样的:@"gsRightIPServerStart", @"rights.name['RIGHT_IP_SERVERSTART'].granted" 或者至少可以访问序列化字典在使用的类中,例如。我的 FNPServer 类。

这是我必须使用的 JSON 响应的一部分:

...,
isowner": false,
    "rights": 
    [

    {

        "name": "RIGHT_IP_SERVERSTART",
        "granted": true

    },
    {

        "name": "RIGHT_IP_SERVERREMOVE",
        "granted": true

    },
    {

        "name": "RIGHT_IP_SWITCHCONFIGMODE",
        "granted": true

    },

        {
            "name": "RIGHT_IP_SERVERCREATE",
            "granted": true
        }

    ]}

这是一个简单的数组,可以很容易地表示为布尔值。在这种情况下,一些 NSNumbers (CoreData):

@interface FNPServer : MTLModel <MTLJSONSerializing>
...
@property (nonatomic, strong) NSNumber * gsRightIPServerStart;
@property (nonatomic, strong) NSNumber * gsRightIPServerStop;
@property (nonatomic, strong) NSNumber * gsRightIPServerRestart;
@property (nonatomic, strong) NSNumber * gsRightIPServerModify;
@end

在生成此对象以自行处理转换时或之后,我找不到获取源字典的解决方案。

我不想创建几个不同的类并检查属性以生成一个充满完整对象的数组,以解决一个简单的是或否问题。它应该在没有“外部帮助”的情况下工作,否则我必须检查一堆请求是否存在数据。

谢谢

4

1 回答 1

1

在您的情况下,您不能直接提供 JSONKeyPathsByPropertyKey 所需的密钥。但是您可以将 'rights' 设置为需要 'rights' 数组中的值的属性的 JSON 键路径。然后在 FNPServer 中编写自定义的“propertyNameJSONTransformer”方法。

这是一个我认为“responseDictionary”包含“rights”键的示例。

[MTLJSONAdapter modelOfClass:FNPServer.class fromJSONDictionary:responseDictionary error:&error];

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{ 
             @"gsRightIPServerStart" : @"rights",
             ...
             };
}

+ (NSValueTransformer *)gsRightIPServerStartJSONTransformer {
    return [MTLValueTransformer transformerUsingForwardBlock:^id(NSArray *rights, BOOL *success, NSError *__autoreleasing *error) {

        // here you have the 'rights' as an array
        // you can get the right value for gsRightIPServerStart within 'rights'
        // then return it by converting to an NSNumber
    }];
}
于 2015-10-19T19:41:55.657 回答