【问题标题】:How to create Model Classes(NSObject) automatically from json dictionary?如何从 json 字典自动创建模型类(NSObject)?
【发布时间】:2016-03-09 12:58:57
【问题描述】:

有没有办法创建字典或 json 响应的模型类(包装器)?因为在我的应用程序中有很多 Web 服务,并且所有 WS 都包含大数据。如果我一直一一创建,则需要花费大量时间来创建带有检查 Null 数据和编码-解码对象的 NSObject 类。请建议我手动创建所有 NSObject 是正确的方法吗?我不想解析直接字典。 谢谢。

【问题讨论】:

  • 如果您不能(或不愿意)添加自定义对象为您提供的值,那么您不妨将它们保留为字典。
  • @trojanfoe 我不想直接使用 NSDictionary 因为 NSObject 是处理空值
  • 你不能自动完成。您需要创建自己的构造函数,例如initWithDictionary

标签: ios objective-c json parsing nsdictionary


【解决方案1】:

最后我得到了适用于iOS 和Android 的非常简单快速的模型类生成器工具。只需复制并粘贴您的响应并从工具中获取模型类。

  • AppStore (Mac AppStore) 下载 JSON 加速器
  • 从浏览器复制您的 JSON 响应。(响应必须经过 JSON 验证)。

  • 粘贴到 Json 加速器中 >> 单击生成并使用您的模型名称保存。

  • 选择输出语言并添加基类名称(不需要类前缀)
  • 见下文生成的模型类和子模型类(它是自动生成所有 JSON 对象类)


这样使用>>> 例如,您的 JSON 响应字典是

{"employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]}
  • 制作员工数组,然后使用创建的模型类创建对象,如下面的代码,您必须使用For loopenumerateObjectsUsingBlock 中的任何一个来创建,然后添加到可变数组中。

    NSArray *arrTemp = [NSArray arrayWithArray:yourResponceDict[@"employees"]]; NSMutableArray *myMutableArray = [NSMutableArray 数组];

    [arrTemp enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        Employee *aObj = [Employee modelObjectWithDictionary:obj];
        [myMutableArray addObject:aObj];
    }];
    

此工具非常简单且省时,可用于创建 Json 对象类以在开发中的任何位置解析数据。

【讨论】:

    【解决方案2】:

    您可以为此目的使用 BaseModel、ObjectMapper 或 EVReflection 开源项目等模块。它们都是可以在项目中使用的开源模块。

    【讨论】:

      【解决方案3】:

      你看过NSKeyValueCoding吗?它有几种您可能会觉得有用的方法,包括以下一种,它可以根据对象的字典表示设置对象上的所有值。

      [object setValuesForKeysWithDictionary:dictionary];

      假设您能够以某种方式从字典表示中确定对象的类,您可以使用它;此外,您还可以使用 dictionaryWithValuesForKeys: 轻松将对象转换为字典

      【讨论】:

        猜你喜欢
        • 2011-06-23
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        • 2022-06-22
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2023-01-31
        相关资源
        最近更新 更多