首页 \ 问答 \ RestKit对象映射:如何从键值映射到新对象/关系?(RestKit Object Mapping: How to map from key values to new object / relation?)

RestKit对象映射:如何从键值映射到新对象/关系?(RestKit Object Mapping: How to map from key values to new object / relation?)

不确定标题是否描述最佳问题,如果您有更好的描述,请编辑标题。

所以我正在实施一个处理产品订单的应用程序。 在每个订单中,都有“行项目”,即每个产品的订单信息。 我们从REST API调用获得的“行项目”的JSON数据如下所示:

JSON数据:

"line_item":{
   "id":1234, // Product ID
   "name":"Cliff Bar",
   "sold_price":12.00,
   "sold_quantity":25
}

CoreData对象(采用JSON格式):

"line_item"{
   "product":{
     "id":1234,
     "name":"Cliff Bar",
     "description":"Awesome food",
     "inventory_level":12,
     "standard_price":11.00
   },
    "sold_price":12.00,
    "sold_quantity":25
}

正如您所看到的,“id”和“name”更像是所售产品的“标识符”,如果您愿意,则更像“主键”。 (CoreData没有主键的概念,RestKit就是这样)当我从其余API获取JSON信息时,它实际上“折叠”了line_item对象内部的产品对象以解决性能问题。

问题1:我该如何处理?

如果产品不存在,是否使用“id”和“name”以外的键值创建新的产品对象? 然后,如果需要,我将获取完整的产品对象。 这是一个好方法吗?

如果我不创建这些不完整的对象,只需保持CoreData对象定义与JSON对象相同。 我担心CoreData中的对象之间没有很强的关系。

如果你有一个,建议一个更好的解决方案!

问题2:

如果问题1的答案是肯定的,我如何将2个键值(“name”和“id”)映射到一个新创建的对象的字段(“line_item”中“product”的“id”和“name”) ? 我在任何教程中都没有找到任何相关信息。

很想知道如何解决这个问题。 谢谢!


Not sure if the title describes the problem the best, if you have better description please edit the title.

So I am implementing an app that deals with product orders. In each order, there are "line items", namely order information for each product. The JSON data of the "line item" we got from the REST API call looks like this:

JSON data:

"line_item":{
   "id":1234, // Product ID
   "name":"Cliff Bar",
   "sold_price":12.00,
   "sold_quantity":25
}

CoreData Object (in JSON format):

"line_item"{
   "product":{
     "id":1234,
     "name":"Cliff Bar",
     "description":"Awesome food",
     "inventory_level":12,
     "standard_price":11.00
   },
    "sold_price":12.00,
    "sold_quantity":25
}

As you can see, "id" and "name" are more like the "identifier" of the product sold, "primary key" if you will. (CoreData doesn't have the notion of primary key, RestKit kind of does) When I get JSON info from the rest API, it actually "collapsed" the product object inside of the line_item object for performance concerns.

Question 1: How should I deal with this?

Do I create new product object with key values other than "id" and "name" null if the product does not exist? And then I will fetch full product object if it is needed. Is it a good approach?

If I do not create these incomplete object and just keep the CoreData object defined the same as the JSON object. I'm afraid there isn't a strong relation between objects in CoreData.

Suggest a better solution if you have one!

Question 2:

If the answer is yes to question 1, how do I map 2 key values ("name" and "id") to fields of one newly created object ("id" and "name" of "product" inside of "line_item")? I haven't found any information about this in any tutorial.

Love to hear how you would approach this problem. Thanks!


原文:https://stackoverflow.com/questions/19801873
更新时间:2019-09-11 05:39

最满意答案

我真的不明白你的问题。 但是对于你的json,如果我是你,我会像这样创建我的核心数据:

  1. LINE_ITEM:
    • 属性:
      • sold_price
      • sold_quantity
    • 关系:
      • 产品
  2. 产品
    • 属性:
      • ID
      • 名称
      • 描述
      • INVENTORY_LEVEL
      • standard_price
    • 关系:
      • 项目

然后我依赖于此创建RestKit映射。

RKManagedObjectStore *mos = [RKObjectManager sharedManager].managedObjectStore;
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Line_item" inManagedObjectStore:mos];
mapping.identificationAttributes = @[@"id"];
[mapping addAttributeMappingsFromArray:@[@"sold_quantity", @"sold_price"]];

[mapping addRelationshipMappingWithSourceKeyPath:@"product" mapping:[Product manageObjectMappingDefinition]];

哦,我意识到我的代码和结构与你的json不兼容。

以下是您如何识别line_item的问题? 没有它,我无法设置identificationAttributes


I don't really understand your question. But with your json, if I were you, I would create my Core Data like this:

  1. Line_item:
    • attribute:
      • sold_price
      • sold_quantity
    • relationship:
      • product
  2. Product
    • attribute:
      • id
      • name
      • description
      • inventory_level
      • standard_price
    • relationship:
      • items

And then I create RestKit mapping depend on this.

RKManagedObjectStore *mos = [RKObjectManager sharedManager].managedObjectStore;
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Line_item" inManagedObjectStore:mos];
mapping.identificationAttributes = @[@"id"];
[mapping addAttributeMappingsFromArray:@[@"sold_quantity", @"sold_price"]];

[mapping addRelationshipMappingWithSourceKeyPath:@"product" mapping:[Product manageObjectMappingDefinition]];

Oh, I realize my code and struct is not compatible with your json.

Here is the question, how you identify your line_item? Without it, I can't set the identificationAttributes.

2013-11-06

相关问答

更多

没有KVC的RestKit对象映射关系(RestKit Object Mapping Relationships without KVC)

是的,RestKit可以在绘图时为您提供这种关系。 在您的Contact模型的RKManagedObjectMapping上,您需要执行以下操作: 添加一个关系映射到母公司: [objectMapping mapRelationship:@"company" withMapping:companyMapping] 将companyID属性映射到您的联系人模型上 确保您在这两个类上都配置了primaryKeyAttribute 指示RestKit来保存关系: [objectMapping conne ...

使用主键的RestKit关系映射(RestKit Relationship Mapping with Primary Key)

您需要为项目添加一个瞬态属性(称为shopId )和一个关联的映射。 使用外键映射配置关系如下: NSEntityDescription *itemEntity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]; NSRelationshipDescription *shopRelationship = [itemEntity relationshipsByName][ ...

由于另一个对象映射,RestKit没有映射对象(RestKit not mapping objects because of another object mapping)

我设法通过完全匹配pathPattern来请求url,忽略所有get参数,因此它是请求中的“catalog / item”和映射中的“catalog / item”并且一切正常,即使生成的url是catalog / item ?CATEGORY_ID = 2。 I managed to make it work by exactly matching pathPattern to request url, ignoring all get parameters, so it was "catalo ...

RestKit映射非托管对象(RestKit mapping unmanaged objects)

您不能拥有创建托管对象的映射,但不能将其保存到上下文中。 您可以自由编辑返回的对象,然后根据需要从成功块中重新保存。 如果由于某种原因这不是一个选项,您可以创建到自定义对象或字典的映射,然后转换为托管对象并自行保存。 如果您选择使用字典,则可以使用KVC方法setValuesForKeysWithDictionary:轻松更新您的托管对象setValuesForKeysWithDictionary: 。 从下面的评论中,退一步思考一下: 我是否需要一次性收集所有这些数据(我可以使用多个响应描述符) ...

Automapper:将X类型的源属性从源对象映射到目标对象,并将equivlanet属性映射到类型X.(Automapper: Map property of type X from source object to destination object with equivlanet properties to type X)

传入要映射的子对象怎么样? 例如 cfg.CreateMap<DbRole, UserRoleDto>(); 然后,您将映射dbUserRole.Role而不是映射dbUserRole.Role 。 var userRoleDto = mapper.Map<UserRoleDto>(dbUserRole.Role); 以下是使用以下类的另一个类似示例: public class Person { public int person_id; public int age;

将对象中的所有键转换为新对象(Transforming all keys in object into a new object)

这根本不合理,但据我所知,标准JavaScript库中没有像对象一样的东西。 你会看到人们(ab)使用reduce来: const newObj = Object.keys(obj).reduce((newObj, key) => { newObj[key] = decrypt(obj[key]); return newObj; }, {}); ...也可以使用逗号运算符写入(ab): const newObj = Object.keys(obj).reduce((newObj

如何将ember对象层次结构映射到Haxe(How to map ember object hierarchy to Haxe)

在Ember中有没有直接调用新的Something()? 在大多数情况下,没有。 你应该调用Class.create()而不是new Class() 。 这个关系是否反映在yuidoc的data.json输出中,还是我需要直接解析源代码以便将所有方法收集到我的类定义中? data.json文件应包含大部分编写的文档。 您将遇到的问题是并非所有内容都被记录(主要是私有API)。 我在哪里可以找到Container Class API文档? 在源代码中。 is there any direct cal ...

ORM - 使用Javascript进行对象关系映射(ORM - Object relational mapping with Javascript)

我认为我正确地阅读了你的问题,如果是的话: 我将关系表示为子文档或ID列表。 决策点有多少其他实体需要与所讨论的子文档的关系。 在你的例子中,如果用户是唯一具有这些项目和项目的用户唯一的实体,我会将项目保存在用户的子文档中。 但是,很可能有几个用户可能在同一个项目中,也可能有一个团队实体将所有项目分配给该团队。 在这种情况下,您需要大量的子文档,有大量重复的数据,并且您会介绍一个要求,即如果说项目名称发生了更改,则会更新每个子文档。 如果您将项目作为单独的集合保存并引用这些ID,则只有一个地方可

相关文章

更多

最新问答

更多
  • .net Rx:消息的有序批处理(.net Rx: in-order batch-processing of messages)
  • 查询在给定区域中包含全景图的商业场所的api?(Query places api for business venues in given area which contain panoramas?)
  • linux启动的时候的两条进度条各表示在加载什么?
  • 测试是否已存在某些内容(Testing if something already exists)
  • iOS7和jQuery mobile:面板在打开和关闭后变为空白(iOS7 and jQuery mobile: panel goes blank once opened and closed)
  • 在Spring中结合GET和POST请求方法(Combine GET and POST request methods in Spring)
  • 从Geany内部运行应用程序的多个实例(Run multiple instances of an application from inside Geany)
  • 使用Yii2在邮件中嵌入图像时出错(Error when embed image in mail using Yii2)
  • 带有不同频率的LED计数器程序(0 - 15)(Led Counter Program (0 - 15) with different frequencies)
  • Google支持SAML 2.0 ECP(Google support for SAML 2.0 ECP)
  • 如何识别结构构件的尺寸?(How can i identify the size of structure member?)
  • 带有计数器的列表迭代中的Netlogo列表(Netlogo list in list iterations with counter)
  • Eclipse CDT中对函数的未定义引用(undefined reference to function in Eclipse CDT)
  • 如何确定一个类是否是java中接口的实现(How to determine if a class which is an implemenation of an interface in java)
  • Wireshark捕获过滤器示例(Wireshark Capture Filter Example)
  • 什么是NoSQL?(What exactly is NoSQL?)
  • 如何在sass中编写媒体查询?(How to write media queries in sass?)
  • spring destroy-method +请求范围bean(spring destroy-method + request scope bean)
  • ssis包中全局表的范围(Scope of Global Table in ssis package)
  • 如何在较小的屏幕上禁用Bootstrap的“词缀”?(How can I disable Bootstrap's “affix” on smaller screens?)
  • SQLite Min函数在使用String数据的行中返回NULL(SQLite Min function returns NULL in row with String data)
  • 如何在Cordova中更新应用程序版本(How to update app version in Cordova)
  • 当我在while循环中使用char []读取Android中的文本文件时出现重复行(repeated lines when I use char[] in while loop for reading text file in Android)
  • 有没有办法按顺序打印数组,在[TCL]中输入条目(Is there a way to print array in order with entries entered in that [TCL])
  • 如何在倒排索引结构中搜索短语查询?(How to search phrase queries in inverted index structure?)
  • 导致在WCF中返回HTTP错误状态(Causing HTTP error status to be returned in WCF)
  • qsqltablemodel不兼容的数据类型(qsqltablemodel incompatible data types)
  • 如何在没有包的情况下引用Java文件?(How can I reference Java files without packages?)
  • Rails 4.1.1相关模型属性,嵌套表单不保存(Rails 4.1.1 related model attribute with nested form not saving)
  • 如何将byte []转换成字符串?(How to convert UTF-8 byte[] to string?)