通过 RestKit 使用单个字符串元素列表解析 JSON

Posted

技术标签:

【中文标题】通过 RestKit 使用单个字符串元素列表解析 JSON【英文标题】:Parse JSON with list of single string element by RestKit 【发布时间】:2015-09-28 11:40:03 【问题描述】:

如何配置 RestKit 来解析这个 JSON:

"platform":["This field is required."],"push_token":["This field is required."]

RestKit 能否支持此 JSON 中不同的各种字段集?如示例所示,只有一个字段“platform”或一个字段“push_token”或两个字段。

UPD:

@interface Register : NSObject

@property (nonatomic, copy) NSString * platform;
@property (nonatomic, copy) NSString * push_token;

+ (void) initEntityForRestKit;
+ (NSString *) getURL;
+ (NSDictionary*) elementToPropertyMappings;
+ (RKObjectMapping *) entityMapping;

@end

@implementation Register

+ (NSString *) getURL 
    return @"/api/register/";


+ (void) initEntityForRestKit 
    RKResponseDescriptor *responseFaultDescriptor = [RKResponseDescriptor
                                                     responseDescriptorWithMapping:[Register entityMapping]
                                                     pathPattern:[Register getURL]
                                                     keyPath:nil
                                                     statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];
    [[RKObjectManager sharedManager] addResponseDescriptor:responseFaultDescriptor];


+ (NSDictionary*)elementToPropertyMappings 
    return @@"platform":@"platform",
             @"push_token":@"push_token";


+ (RKObjectMapping *) entityMapping 
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Register class]];
    [mapping addAttributeMappingsFromDictionary:[Register elementToPropertyMappings]];

    return mapping;


@end

UPD2:

2015-09-30 17:22:18.756 test[50727:2976562] E restkit.network:RKObjectRequestOperation.m:215 POST 'http://test.com/api/register/' (400 Bad Request / 0 objects) [request=0.2629s mapping=0.0000s total=0.4324s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1011 "Loaded an unprocessable error response (400)" UserInfo=0x7fad39651530 NSLocalizedDescription=Loaded an unprocessable error response (400), NSErrorFailingURLKey=http://test.com/api/register/
2015-09-30 17:22:18.756 test[50727:2976487] E app:AppDelegate.m:89 Load failed with error: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1011 "Loaded an unprocessable error response (400)" UserInfo=0x7fad39651530 NSLocalizedDescription=Loaded an unprocessable error response (400), NSErrorFailingURLKey=http://test.com/api/register/

【问题讨论】:

不清楚你在问什么,显示你试图映射到的类定义。 @Wain ,完成。但是这段代码不起作用:) 这里一头雾水,你的意思是上面的代码不能解析你上面提到的json吗?或者您只是在问上面的代码是否适合您的目的? @ybbaigo 该代码不适用于上面介绍的 json restkit 的错误信息是什么? 【参考方案1】:

我刚刚查看了Restkit的源代码。如果是错误响应,它将始终返回错误。您可以根据您的情况调试以下代码。

// If the response is a client error return either the mapping error or the mapped result to the caller as the error
if (isErrorStatusCode) 
    if ([self.mappingResult count] > 0) 
        error = RKErrorFromMappingResult(self.mappingResult);
     else 
        // We encountered a client error that we could not map, throw unprocessable error
        if (! error) error = RKUnprocessableErrorFromResponse(self.response);
    
    self.error = error;
    [self willFinish];
    return;

你可以在这里找到代码https://github.com/RestKit/RestKit/blob/development/Code/Network/RKResponseMapperOperation.m#L378

【讨论】:

以上是关于通过 RestKit 使用单个字符串元素列表解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 Restkit 解析纯文本

ios RestKit 获取一定数量的元素而不是完整列表

Python 操作 DOM(待更)

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

将嵌套列表的单个元素从因子转换为字符

在 Objective C 中使用 RestKit 解析复杂的 JSON