我一直在很好地解析我的JSON,但我的服务器只是改变了我。我的JSON用于这个样子:RestKit使用复杂对象数组映射
{
"blobs": [
{
"createdOn": "2012-03-16T15:13:12.551Z",
"description": "Fake description",
"hint": "And a useless hint",
"id": 400,
"name": "Fake CA one",
"publicId": "FF6",
"type": 0
},
{
"createdOn": "2012-03-16T17:33:48.514Z",
"description": "No hint on this one, but it does have a description.",
"hint": "Hint",
"id": 402,
"name": "Second fake one in CA",
"publicId": "FF8",
"type": 0
}
]
}
和我的映射是这样的:
RKObjectMapping* blobMapping = [RKObjectMapping mappingForClass:[GetResponseInRegionResponse class]];
[blobMapping mapKeyPath:@"name" toAttribute:@"name"];
[blobMapping mapKeyPath:@"id" toAttribute:@"blobId"];
[blobMapping mapKeyPath:@"description" toAttribute:@"description"];
[blobMapping mapKeyPath:@"hint" toAttribute:@"hint"];
[[RKObjectManager sharedManager].mappingProvider setMapping:blobMapping forKeyPath:@"blobs"];
现在我的服务器已经改变了,我得到这个回:
{
"blobsList": {
"blobs": [
{
"createdOn" :"2012-03-16T15:13:12.551Z",
"description": "Fake description",
"hint": "And a useless hint",
"id": 400,
"name": "Fake CA one",
"publicId": "FF6",
"type": 0
},
{
"createdOn": "2012-03-16T17:33:48.514Z",
"description": "No hint on this one, but it does have a description.",
"hint": "Hint",
"id": 402,
"name": "Second fake one in CA",
"publicId": "FF8",
"type": 0
}
]
}
}
所以我添加这对我的映射:
RKObjectMapping* blobsListMapping = [RKObjectMapping mappingForClass:[GetResponseInRegionResponseList class]];
[blobsListMapping mapKeyPath:@"blobsList" toAttribute:@"blobsList"];
[[RKObjectManager sharedManager].mappingProvider setMapping:blobsListMapping forKeyPath:@"blobsList"];
,并且是我的职业:
@interface GetResponseInRegionResponse : NSObject
{
NSString* name;
NSString* blobId;
NSString* description;
NSString* hint;
}
@interface GetResponseInRegionResponseList : NSObject
{
NSArray *blobsList;
}
当我解析此JSON,我得到一个其中有2个对象的JKArray,这两个都是JKDictionary对象一个对象。很明显,这是我的数据,但它是以JKDictionary的形式。它从未映射到GetResponseInRegionResponse类!
从阅读github文档,它看起来像我想使用数组的toRelationship方法,但我只是没有看到它放在哪里。如果我按照“公司章程”的例子,并尝试这个办法:
[blobListMapping mapKeyPath:@"blobs" toAttribute:@"blobsList"];
[blobListMapping mapKeyPath:@"blobs" toRelationship:@"blobsList" withMapping:blobMapping];
我得到这个异常:
2012-03-19 14:59:53.704 Ferret[8933:16303] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to add mapping for keyPath blobsList, one already exists...'
所以,我怎么能映射复杂对象的阵列我的JSON里面?
我很感激任何帮助。谢谢!
当我这样做,我得到:。 - ***因未捕获异常'NSUnknownKeyException'而终止应用程序,原因:'[ valueForUndefinedKey:]:此类不是键编码兼容的密钥ID'。 –
2012-03-19 20:21:37
啊,那是我的错误,JSON有一个标记为“id”的元素,我有一个名为“blobId”的类成员而不是“id”。但我还需要有关系部分。我从RestKit邮件列表中取得了这个结果。如果那个人在这里遇到这个问题的一部分,我会看看我是否可以分裂你们两个人之间的恩赐。非常感谢! – 2012-03-19 20:48:03
您的JSON设置的方式不需要关系。在_object_“blobsList”里面你直接有另一个_object_“blob”,只有你有这个数组。 “blobList”永远不会包含数组,如果它真的像你的例子。 – k1th 2012-03-19 20:58:31