如何从 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 loop
或enumerateObjectsUsingBlock
中的任何一个来创建,然后添加到可变数组中。
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)?的主要内容,如果未能解决你的问题,请参考以下文章