嵌套字典的地幔变换

时间:2014-05-16 00:04:56

标签: ios objective-c json github-mantle

我认为this问题对我的情况有用,但我对Mantle和iOS缺乏经验已经结束了我的思路。基本上,我有一大块JSON,我想将嵌套字典和数组转换为Mantle对象。

"features": {
    "App": {
        "status": "_ACTIVE",
        "unavailableReasons": [],
        "modernCapabilities": [{
            "capabilityType": "LOCK_AUTO_REPLY",
            "providerStatuses": [{
                "providerType": "MY_PROVIDER",
                "status": false,
                "unavailableReasons": ["NOT_SUPPORTED_BY_PRODUCT", "DEVICE_OS_NOT_SUPPORTED"]
            }]
        }, 
         ...
         ...             
        {
            "capabilityType": "LOCK_CONTACT_WHITELIST",
            "providerStatuses": [{
                "providerType": "OTHER_PROVIDER",
                "status": true,
                "unavailableReasons": []
            }]
        }
        ]}
 }

我希望能够实现与上面链接的类似解决方案,即迭代字典中的“功能”键,并将变换应用于每个键/值对。因此,在这种情况下,到“App”键和它的字典值(以及后来的“modernCapabilities”键和它的数组等等)我知道对于后面的步骤我将需要单独的模型类,并且那些存在,但我遇到了第一步的麻烦,“App”键的变换及其价值。

这就是我现在所拥有的:

+ (NSValueTransformer *)featureTypesJSONTransformer {
    NSValueTransformer *transformer = [NSValueTransformer valueTransformerForName:@"FeatureStatus"];

    return [MTLValueTransformer transformerWithBlock:^NSDictionary *(NSDictionary *features) {
        NSMutableDictionary *transformedValues = [[NSMutableDictionary alloc] init];
        for (NSString *key in features) {
            id transformedValue = [transformer transformedValue:[features objectForKey:key]];
            if (transformedValue ) {
                [transformedValues setObject:transformedValue forKey:key];
            }
        }

        return transformedValues;
    }];
}

从代码中可以看出,我正在尝试保留密钥,并将其附加到新的Dictionary,其值为另一个转换,本例中为FeatureStatus(@ {“App”:})

问题是没有[FeatureStatus transformedValue:],虽然我有一个JSONKeyPathsForPropetyKey,因为我想稍后映射'status','unavailableReasons'和'modernCapabilities'键。

我的下一步是什么?如何注册一个可以完成我想要它的ValueTransform?

0 个答案:

没有答案