如何创建键值为对象或数组的 JSONModel 类
Posted
技术标签:
【中文标题】如何创建键值为对象或数组的 JSONModel 类【英文标题】:How to create JSONModel class of key value is Object or Array 【发布时间】:2016-02-19 11:03:55 【问题描述】:在我的回复中是
"url":
“full_img”: "imagelink",
“id”: “1”,
“small_img”: "imagelink",
还有一些时间数组
"url": [
“full_img”: "imagelink",
“id”: “1”,
“small_img”: "imagelink",
,
“full_img”: “imagelink”,
“id”: “2”,
“small_img”: "imagelink",
]
在此我创建了一个JsonModel 类,但是我如何将该 url 类声明为数组或对象,或者我必须为 url+json 创建两个类?
现在,如果 Url 是 Array 那次我没有任何问题,但是当它变成 Object 时会出现类似错误。
Error Domain=JSONModelErrorDomain Code=1 "无效的 JSON 数据。JSON 类型与预期类型不匹配。检查错误用户信息。" UserInfo=NSLocalizedDescription=无效的 JSON 数据。 JSON 类型与预期类型不匹配。检查错误用户信息,kJSONModelTypeMismatch=Property ‘url’声明为NSArray* 但对应的JSON值不是JSON数组,kJSONModelKeyPath=url
【问题讨论】:
这里说API错了。它应该总是返回一个数组!您可以尝试在字典中反映url
键的值类型
@LucaD No api 没有错,就像 yahoo cricket Api,如果第一局在那个时候运行它会给出一个对象(第一队的击球细节)但是如果第二局在那个时候运行它就变成一个数组(在索引 0 中给出第一队的详细信息,在索引 1 中给出第二队的击球详细信息)。
采用通用 REST 指南,您现在正在检索 Images
的列表,该列表访问像 /images
这样的 URL。这意味着你想要一个list
又名array
。如果图像只是一张,则无关紧要
你是如何尝试我的回答的......
【参考方案1】:
1) 你的模型类应该是这样的
@interface Image : NSObject
@property (strong,nonatomic) NSString * fullImage;
@property (strong,nonatomic) NSString * id;
@property (strong,nonatomic) NSString * smallImage;
2) 你应该在数组中保存Image
对象并使用索引来使用它
3) 使用 Array 的优点是您可以使用 tableView
和 collectionView
非常有效地使用 indexpath
4) 解析响应后,您可以通过检查类来检查响应并制作如下所示的模型对象
id responseData=[NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if ([responseData isKindOfClass:[NSDictionary class]])
//parse response and add in imageArray
else if ([responseData isKindOfClass:[NSArray class]])
//parse each object by enumerating the array & add the parsed object in Image Array
您无需创建两个对象,而是可以重复使用相同的对象
Image
对象
【讨论】:
以上是关于如何创建键值为对象或数组的 JSONModel 类的主要内容,如果未能解决你的问题,请参考以下文章
JsonModel 无法将 json 中的数组转换为 jsonmodel 继承类
php 二维数组中取某个唯一的键值为键名。(通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组的元素为键值。)