RestKit 0.2:扁平化 JSON 中的层次结构

Posted

技术标签:

【中文标题】RestKit 0.2:扁平化 JSON 中的层次结构【英文标题】:RestKit 0.2: flattening the hierarchy in JSON 【发布时间】:2012-12-20 18:20:24 【问题描述】:

也许这里有一个类似的问题,但我找不到。所以我有 RestKit 0.2pre4 并想映射这样的 JSON ...


    "location": 
        "position": 
            "latitude": 53.9675028,
            "longitude": 10.1795594
        
    ,
    "id": "da3224f2-5919-42f2-9dd8-9171088f4ad7",
    "name": "Something even more beautiful",

...对这样一个对象:

@interface FavoritePlace : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * placeId;
@property (assign, nonatomic) double latitude;
@property (assign, nonatomic) double longitude;

@end

如您所见,关键是我不想创建关系并将“位置”对象单独存储在数据库中——这没有任何意义。因此,我想将那些嵌套的东西(location.position.latitude 和 location.position.longitude)分配给对象本身的特定属性。如何实现?

【问题讨论】:

【参考方案1】:

显然,我做了一个疯狂的猜测,它成功了!这是解决问题的映射:

[placeMapping addAttributeMappingsFromDictionary:@
     @"id": @"placeId",
     @"name": @"name",
     @"location.position.latitude": @"latitude",
     @"location.position.longitude": @"longitude"     
     ];

还没有在文档中找到这个,但也许只是我......无论如何,如果有一些合乎逻辑但没有记录的东西有效,那么框架应该是好的。 :) RestKit FTW!

【讨论】:

【参考方案2】:

您可以将包含 json 字符串的字符串传递给 nsdata

NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

然后,您将能够使用 ios API 解析 de json 数据

NSError *error;
NSDictionary *json = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error] : nil;

现在,检查生成的 NSDictionary(例如使用 NSlog),填充您的“FavoritePlace”对象并将其持久化。

希望有所帮助!

【讨论】:

感谢您的回答,但如果可能的话,我更愿意留在 RestKit 领域。开始摆弄原始 JSON 会破坏使用 RestKit 的整个目的,恕我直言...... Oki,因此我无法帮助你 xD。祝你好运! 您为什么不查看您的 3rd 方框架的文档?如果功能和文档不令人满意,请放弃。

以上是关于RestKit 0.2:扁平化 JSON 中的层次结构的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 0.2 从 CoreData 获取本地数据

RestKit 0.2 映射 Core Data <--> JSON 与一对多关系

iOS RestKit 0.2 解析本地 Json 的最佳方法是啥

Restkit 映射 0.2

“找不到给定内容的任何映射,keyPath=null”RestKit 0.2

Restkit 0.2 返回 RKMappingSourceObject 类型对象的一对多类型关系