RestKit 键存在于结构化对象中

Posted

技术标签:

【中文标题】RestKit 键存在于结构化对象中【英文标题】:RestKit key existence in stractured objects 【发布时间】:2015-02-10 16:38:50 【问题描述】:

大家好,

我想用 RestKit 映射从我的服务器中提取的复杂 JSON 结构。

以下是 JSON 结构示例:

"_cat0": [
    
        "title": "category header",
        "catId": 1
    ,
    
        "id": 542232,
        "title": "post post",
        "time": "1421744040"
    ,
    
        "id": 542232,
        "title": "post post",
        "time": "1421744040"
    ,
    
        "id": 542232,
        "title": "post post",
        "time": "1421744040"
    
],

正如您在此处看到的,我们有一个 head 对象,它表示每个部分的类别。 "_cat0" 实际上是一个前缀,包含 JSON 中每个类别的完整数据。这个前缀是连续的,包含里面的所有东西,这意味着:帖子、类别数据和更多参数。

每个类别的第一个对象包含标题和类别 ID


        "title": "category header",
        "catId": 1
     

其他对象包含该类别的帖子。

我对 RestKit 的问题是通过 JSON 中的值找到 Post 对象和 Category 对象。

我考虑在 head 对象中找到唯一键并将其存储为类别对象,然后将 JSON 中的任何其他对象存储为 Post。但是我没有找到任何可以帮助我确定密钥存在或检查对象的密钥是否可以为空的函数。

这是我对这个问题的尝试:

if ([representation containsValueForKey:@"catId"]) 
        // it's a category object
        return categoryMapping;
     else 
        // it's a post object
        return postMapping;
    

但是这段代码在运行后崩溃了。

对这个问题有什么想法吗?

【问题讨论】:

欢迎来到 Stack Overflow。如果您在调试崩溃时需要帮助,请发布崩溃堆栈跟踪和错误消息。 【参考方案1】:

如果您已将 JSON 数组分配给名为 _cat0 的对象,则可以执行以下操作:

for (NSDictionary *object in _cat0) 
  if ([[object allKeys] contains:@"catId"]) 
    // Process object as category metadata.
   else 
    // Process object as a post.
  


如果您可以控制 JSON 响应,我强烈建议您使其结构更有意义。大致如下:

"_cat0": 
    "title": "category header",
    "catId": 1
    "posts": [
        
            "id": 542232,
            "title": "post post",
            "time": "1421744040"
        ,
        
            "id": 542232,
            "title": "post post",
            "time": "1421744040"
        ,
        
            "id": 542232,
            "title": "post post",
            "time": "1421744040"
        
    ]
,

【讨论】:

其实正如Ian所说,这个JSON结构更有意义。那么用 RestKit 获取和映射 JSON 就更容易了。 @Ian 所以我改变了 JSON 结构,你有正确方法的教程吗?

以上是关于RestKit 键存在于结构化对象中的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 对象建模动态数据

RestKit 0.20:在 JSON 中使用动态扁平化层次结构

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

Restkit 在嵌套的外键关系中使用 @parent

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

浅谈python 字典对象的 Pythonic 用法