如何创建键值为对象或数组的 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 的优点是您可以使用 tableViewcollectionView 非常有效地使用 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 创建模型类?

JsonModel 无法将 json 中的数组转换为 jsonmodel 继承类

JSONModel:json到数组?

php 二维数组中取某个唯一的键值为键名。(通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组的元素为键值。)

c_cpp 使用JSONModel 1.0.1从JSONModel对象数组中获取字符串的类别

c_cpp 使用JSONModel 1.0.1从JSONModel对象数组中获取字符串的类别