Restkit如何将任意json(键可能会超时更改)映射到NSDictionary

Posted

技术标签:

【中文标题】Restkit如何将任意json(键可能会超时更改)映射到NSDictionary【英文标题】:Restkit how to map arbitrary json (keys may change overtime) to NSDictionary 【发布时间】:2014-05-26 14:41:35 【问题描述】:

假设响应PUT 请求:

[[RKObjectManager sharedManager]
    putObject:nil
    path:@"/api/users/add-user"
    parameters:dictionary
    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
        NSLog(@"Success");
    
    failure:^(RKObjectRequestOperation *operation, NSError *error)
        NSLog(@"Failure");
    
];

我得到一个未知结构的“JSON”。我不知道期望什么和多少个键,但值都是字符串。如何将其映射到 NSDictionary *object

【问题讨论】:

呃,你用 NSJSONSerialization 解析它。你有什么不明白的地方吗? 我到底要解析什么? 你“得到”的 JSON 字符串。 虽然,看看 RK 的东西,“mappingResult”似乎已经包含(薄薄的)字典。所以你完成了。只需查看字典即可了解其中的内容。 @ZviBar 如果你想要原始的NSDictionary 然后[mappingResult dictionary] 会给你你需要的东西。从那里你可以遍历字典键并获取它的对应值。 【参考方案1】:

您可以使用 REST 客户端查看响应和 JSON 响应的结构,并创建相应的模型来映射它。或者,如果这不是一个一致的模型,您可以使用 NSJSONSerialization 将 JSON 解析为 KV 对,以及您对“mappingResult”感兴趣的变量。

您可能想查看 AFNetworking 2.0。它适用于您的 REST 调用和解析 JSON。 http://nshipster.com/afnetworking-2/

【讨论】:

如何使用 'NSJSONSerialization' 和 - (void)putObject:(id)object path:(NSString *)path parameters:(NSDictionary *)parameters success:(void ( ^ ) ( RKObjectRequestOperation *operation , RKMappingResult *mappingResult ))success failure:(void ( ^ ) ( RKObjectRequestOperation *operation , NSError *error ))failure 方法 在您的成功块中,您将获得 RKMappingResult 类型的 mappingResult。你应该看看你的响应的结构是什么,然后看看你是否需要进行序列化。看restkit.org/api/latest/Classes/RKMappingResult.html 谢谢。现在我明白了 RKMappingResult 的真正含义。【参考方案2】:

如果 JSON 响应的结构未知,那么您要么不应该使用 RestKit(只需使用 NSJSONSerialization 并自己处理所有事情),要么您需要使用 RKDynamicMapping 以便您可以分析传入的数据和决定(即时)创建什么映射并返回处理。

【讨论】:

以上是关于Restkit如何将任意json(键可能会超时更改)映射到NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

Restkit — 如何用可变键名映射 json 对象

如何使用不同的主键属性更新 RestKit 中的已发布对象?

如何递归加载RestKit中由外键标识的嵌套对象?

RestKit 超时被忽略

RestKit - 不符合键值编码,在 JSON 中没有根

RestKit:如何定义可选(嵌套)键路径