RestKit:JSON 映射不起作用 Objective-c

Posted

技术标签:

【中文标题】RestKit:JSON 映射不起作用 Objective-c【英文标题】:RestKit: JSON mapping doesn't work Objective-c 【发布时间】:2013-01-16 07:19:51 【问题描述】:

我使用 RestKit 框架连接到一个 REST Web 服务。 如果我想要 resultlistEntries,映射应该是什么样子。 我有一个这样的 JSON 响应:


"resultlist.resultlist": 
    "paging": 
        "numberOfHits": 69978,
        "numberOfPages": 3499,
        "pageNumber": 1,
        "pageSize": 20
    ,
    "resultlistEntries": [
        
            "@numberOfHits": "69978",
            "@realEstateType": "7",
            "resultlistEntry": [
                
                    "@creation": "2013-01-15T16:36:00.000+01:00",
                    "resultlist.realEstate": 
                        "@id": "68014527",
                        "@xsi.type": "search:Office",
                        "calculatedPrice": 
                            "currency": "EUR",
                            "marketingType": "RENT_PER_SQM",
                            "priceIntervalType": "MONTH",
                            "value": 4.5
                        ,
                        "commercializationType": "RENT",
                        "courtage": 
                            "hasCourtage": "YES"
                        ,
                        "floorplan": "false",
                        "netFloorSpace": 155,
                        "price": 
                            "currency": "EUR",
                            "marketingType": "RENT",
                            "priceIntervalType": "MONTH",
                            "value": 697.5
                        ,
                        "totalFloorSpace": 155
                    
                
            ]
        
    ]

以及下面的 RestKit 代码

NSString *pathPattern = @"resultlist.resultEntries";
NSString *keyPath = @"resultEntry";

RKResponseDescriptor *responseDescriptor = 
    [RKResponseDescriptor responseDescriptorWithMapping:mapping 
                                            pathPattern:pathPattern 
                                                keyPath:keyPath   
                                            statusCodes:statusCodes];

结果如下:

2013-01-15 16:49:00.102 RestKit_final[31840:c07] 
Failed with error: No response descriptors match the response loaded.

怎么了?

【问题讨论】:

【参考方案1】:

pathPattern 用于指定将使用响应描述符的端点。例如,@"/hotels/premium" 作为 pathPattern 将意味着如果您调用 @"/hotels/cheap",响应描述符将不适用。您可以将其设置为nil,但我总是希望我的响应描述符尽可能具体。

JSON 响应中 resultlistEntry 数组的 keypath 在技术上应该是 resultlist.resultlist.resultlistEntries,但您可能对 resultlist.resultlist 部分有一些问题。我建议将您的 API 更改为仅返回 resultList,然后您所需的密钥路径将是 resultlist.resultlistEntries

【讨论】:

以上是关于RestKit:JSON 映射不起作用 Objective-c的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 对象映射不起作用

RestKit 直接 + 反向关系映射

RestKit 0.20 嵌套对象映射问题使用 API

JSON 对象映射 - RestKit

Restkit:来自 JSON parentId 的映射关系

restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)