使用 JSONModel 将父值映射到嵌套字典中的属性

Posted

技术标签:

【中文标题】使用 JSONModel 将父值映射到嵌套字典中的属性【英文标题】:Map parent value to a property in nested dictionary with JSONModel 【发布时间】:2014-12-03 16:28:43 【问题描述】:

我什至不确定这是否可行,但我想将节点上的属性映射到数组中的每个项目,这也是节点上的属性。

JSON 示例

"productType" : 
  "name" : "foo",
  "products" : []

所以我希望 name 的值成为每个产品的属性。

我设置了一个 productType 模型,其中有一个 NSArray,所有内容都由 JSONModel 映射。我在想有没有办法在 JSONKeyMapper 中使用 keypath?但是什么都找不到。

【问题讨论】:

所以我希望 name 的值成为每个产品的属性。 如果我理解你在说什么(还不清楚),你想要一个字典。 对于一些简单的事情,你最好扔掉 JSONModel 并只使用 NSJSONSerialization 然后在代码中做任何你需要的对象映射。 我有一个 ProductType 模型和一个 Product 模型。 ProductType 有一个产品数组。这些是通过 JSONModel 和 initWithDictionary 构建的。但我希望能够从 Product 对象中获取 ProductType.name。我想知道是否有办法在 JSONModel 使用的 keyMapper 方法中映射它。 比这复杂一点,其实我只是在抽象相关信息。 更改您的模型并在此处添加名称 【参考方案1】:

您现在可以使用 JSONModel 执行此操作。

假设我们有以下模型:

@class MyModel

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSArray *products;

@end

如果完整的 JSON 文档如下所示:


  "productType1": 
    "name": "foo",
    "products": []
  ,
  "productType2": 
    "name": "foo",
    "products": []
  ,
  "productType3": 
    "name": "foo",
    "products": []
  

那么您应该使用[MyModel dictionaryOfModelsFrom...]; 方法之一。


如果它看起来像这样:


  "productTypes": 
    "productType1": 
      "name": "foo",
      "products": []
    ,
    "productType2": 
      "name": "foo",
      "products": []
    ,
    "productType3": 
      "name": "foo",
      "products": []
    
  

那么你应该使用这样的另一个模型:

@class MyModelContainer

@property (strong, nonatomic) NSDictionary <MyModel> *productTypes;

@end

【讨论】:

以上是关于使用 JSONModel 将父值映射到嵌套字典中的属性的主要内容,如果未能解决你的问题,请参考以下文章

JsonModel 映射问题

如何将嵌套列表映射到 Python 中的可迭代字典

Swift 中的 JSONModel 问题

用映射字典的值替换嵌套字典中的占位符

使用嵌套对象和键对数组建模

Swift映射嵌套字典以交换外部和内部键