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的主要内容,如果未能解决你的问题,请参考以下文章