RestKit 使用嵌套 JSON
RestKit using nested JSON
我在使用 RestKit 获取我需要的数据时遇到困难。
我正在尝试获取此 JSON 文件中的 "jobs" 数据。
{
response: {
accountResult: 1,
accounts: [{
userDetail: {
idString: "de454657",
idName: "alpha"
},
deptId: 245,
jobs: [{
jobId: "584349964",
payHash: 566889,
uniform: {
color: "blue",
tie: "red"},
shoes: {
color: "black",
laces: "black"}
},
{
jobId: "584349965",
payHash: 566867,
uniform: {
color: "blue",
tie: "red"},
shoes: {
color: "black",
laces: "black"}
},
{
jobId: "584349978",
payHash: 566879,
uniform: {
color: "blue",
tie: "red"},
shoes: {
color: "black",
laces: "black"}
}]
}]
}
}
我可以成功映射到 "accounts" 级别并映射到 "idName" 和 "deptID" 等项目,但我无法确定如何到达 "jobs"数据。
keyPath:@"response.accounts.jobs"
未成功运行。如何做到这一点?我正在映射到 class 而不是核心数据,如果这对获取此数据有影响的话。
感谢您的帮助或建议。
更新 - 获取数据的解决方案,但不是原始问题的解决方案,该问题询问是否有直接获取工作数据的方法。
我有解决方案,但仍在寻找解决方法。
由于 "jobs" 是 "accounts" 数组中的一个 JSON 数组,我可以通过两个映射来解析作业 - 首先是帐户,然后是作业。
RKObjectMapping* accountMapping = [RKObjectMapping mappingForClass:[Account class]];
[accountMapping addAttributeMappingsFromDictionary:@{@"deptId":@"deptID"}];
RKObjectMapping* jobMapping = [RKObjectMapping mappingForClass:[Job class]];
[jobMapping addAttributeMappingsFromDictionary:@{@"jobId":@"jobID"}];
[accountMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"jobs"
toKeyPath:@"job"
withMapping:jobMapping]];
有没有一种方法可以直接映射到工作而不用读入账户?我只需要文件中所有工作的列表 - 我的项目不需要帐户信息或它们的关系。使用上面我显然可以读取两个数据点,然后只使用我需要的工作数据——我希望有人知道一种方法来避免同时提取(帐户和工作)和一种只提取工作信息的方法?
不,你不能。您使用多个映射的解决方案是正确的方法。如果不需要 'container' 对象,则可以在映射完成后丢弃它,但不能直接索引到数组中,因此不能向下钻取到该级别。
我在使用 RestKit 获取我需要的数据时遇到困难。
我正在尝试获取此 JSON 文件中的 "jobs" 数据。
{
response: {
accountResult: 1,
accounts: [{
userDetail: {
idString: "de454657",
idName: "alpha"
},
deptId: 245,
jobs: [{
jobId: "584349964",
payHash: 566889,
uniform: {
color: "blue",
tie: "red"},
shoes: {
color: "black",
laces: "black"}
},
{
jobId: "584349965",
payHash: 566867,
uniform: {
color: "blue",
tie: "red"},
shoes: {
color: "black",
laces: "black"}
},
{
jobId: "584349978",
payHash: 566879,
uniform: {
color: "blue",
tie: "red"},
shoes: {
color: "black",
laces: "black"}
}]
}]
}
}
我可以成功映射到 "accounts" 级别并映射到 "idName" 和 "deptID" 等项目,但我无法确定如何到达 "jobs"数据。
keyPath:@"response.accounts.jobs"
未成功运行。如何做到这一点?我正在映射到 class 而不是核心数据,如果这对获取此数据有影响的话。
感谢您的帮助或建议。
更新 - 获取数据的解决方案,但不是原始问题的解决方案,该问题询问是否有直接获取工作数据的方法。
我有解决方案,但仍在寻找解决方法。
由于 "jobs" 是 "accounts" 数组中的一个 JSON 数组,我可以通过两个映射来解析作业 - 首先是帐户,然后是作业。
RKObjectMapping* accountMapping = [RKObjectMapping mappingForClass:[Account class]];
[accountMapping addAttributeMappingsFromDictionary:@{@"deptId":@"deptID"}];
RKObjectMapping* jobMapping = [RKObjectMapping mappingForClass:[Job class]];
[jobMapping addAttributeMappingsFromDictionary:@{@"jobId":@"jobID"}];
[accountMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"jobs"
toKeyPath:@"job"
withMapping:jobMapping]];
有没有一种方法可以直接映射到工作而不用读入账户?我只需要文件中所有工作的列表 - 我的项目不需要帐户信息或它们的关系。使用上面我显然可以读取两个数据点,然后只使用我需要的工作数据——我希望有人知道一种方法来避免同时提取(帐户和工作)和一种只提取工作信息的方法?
不,你不能。您使用多个映射的解决方案是正确的方法。如果不需要 'container' 对象,则可以在映射完成后丢弃它,但不能直接索引到数组中,因此不能向下钻取到该级别。