使用 RESTKit 映射带有括号的 JSON 响应
Posted
技术标签:
【中文标题】使用 RESTKit 映射带有括号的 JSON 响应【英文标题】:Map JSON response that has brackets with RESTKit 【发布时间】:2013-08-06 17:12:43 【问题描述】:我正在使用 RESTKit 执行 GET 请求,我需要帮助映射 JSON 响应。 这是我需要映射的响应:
"limit_hit":false,"providers":
["id":876553,
"name":"Cooper, Bradley N, DDS",
"specialty_groups":["Other Provider"],
"tags":[],
"has_comments":false,
"number_of_comments":0,
"locations":
["address":"1234 Rifle Range Road, El Cerrito, CA, 94530",
"providers_at_address_count":1,
"client_product_count":0,
"non_client_product_count":2,
"address_lines":["1234 Rifle Range Road, El Cerrito, CA, 94530"],
"address_id":234578,
"specialty_groups":
["specialty_group":"Other Provider"],
"provider_types":
["provider_type":"Other Provider"],
"address":"7501 Mission Rd, Shawnee Mission, KS, 66208",
"providers_at_address_count":2,
"client_product_count":0,
"non_client_product_count":2,
"address_lines":["7654 Main S, El Cerrito, CA, 94530"],
"address_id":654432,
"specialty_groups":
["specialty_group":"Other Provider"],
"provider_types":
["provider_type":"Other Provider"]
]
]
我希望能够映射这两个地址,但我不知道如何。我目前所能做的就是映射 id、name、has_cmets 和 number_of_cmets(我使用的是“providers”的键路径)。 这是我当前的映射提供者:
+ (RKMapping *)searchMapping
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[ProviderSearch class]];
[mapping addAttributeMappingsFromDictionary:@
@"id": @"doctorID",
@"name": @"name",
];
return mapping;
我到底做错了什么,我该如何解决?
【问题讨论】:
【参考方案1】:创建另一个方法来返回locations
的映射,然后将该映射关联到这个原始映射。像这样:
// ProviderLocation.m
+ (RKObjectMapping *)objectMapping
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[ProviderLocation class]];
[mapping addAttributeMappingsFromDictionary:@
@"address": @"address",
...
];
return mapping;
关系:
+ (RKObjectMapping *)searchMapping
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[ProviderSearch class]];
[mapping addAttributeMappingsFromDictionary:@
@"id": @"doctorID",
@"name": @"name",
];
RKObjectMapping *locationsMapping = [ProviderLocation objectMapping];
[mapping addPropertyMapping:
[RKRelationshipMapping relationshipMappingFromKeyPath:@"locations" toKeyPath:@"locations" withMapping:locationsMapping]];
return mapping;
只要记住在 ProviderLocation.h
中创建一个名为 locations
的 NSArray 属性即可。
【讨论】:
我假设 ProviderLocation 是指 ProviderSearch,因为我没有 ProviderLocation 类。 其实不是。我假设您使用的是 MVC,因此您将 ProvideSearch 作为要映射的模型,您还有另一个模型来映射地址然后创建关系。【参考方案2】:我以前从未使用过 RKObjectMapping,但是您拥有的“位置”有一个字典对象数组。所以你需要一个
NSArray loc = [myJson objectForKey:@"locations"];
for(NSDictionary *dict in loc)
//here each dict obj will have your "address", "providers_at_address_count" and etc... so if you want to access any of them you can call...
NSString *addr = [dict objectForKey:@"address"];
现在以某种方式将其转换为您正在使用 RXObjectMapping 执行的操作,您就是黄金 =P
【讨论】:
以上是关于使用 RESTKit 映射带有括号的 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 RKObjectMapping 的 RestKit 0.24 将本地 JSON 字符串映射到对象?
当 Restkit 尝试映射时,带有字符串字段(包含 JSON 字符串)的 Json 崩溃