如何从 json 字典自动创建模型类(NSObject)?

Posted

技术标签:

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

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

【问题讨论】:

如果您不能(或不愿意)添加自定义对象为您提供的值,那么您不妨将它们保留为字典。 @***foe 我不想直接使用 NSDictionary 因为 NSObject 是处理空值 你不能自动完成。您需要创建自己的构造函数,例如initWithDictionary 【参考方案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: 轻松将对象转换为字典

【讨论】:

以上是关于如何从 json 字典自动创建模型类(NSObject)?的主要内容,如果未能解决你的问题,请参考以下文章

Swift下面字典(json)和模型的转换

如何使用自定义类型属性从 JSON 初始化模型类

Swift:如何从 json 动态创建字典?

如何在 Swift 3 中为来自 web 服务的 Json 响应创建模型类

如何从 json 数据推断 Django 模型?

如何从 Swift 4 中的字典创建 JSON?