美文网首页iOS开发资料收集
JSONModel简单使用and注意事项

JSONModel简单使用and注意事项

作者: 小屋新 | 来源:发表于2017-05-27 17:15 被阅读54次

觉得有用麻烦给个喜欢,谢谢各位亲😁

我们在开发的项目的时候,需要很多model来存储数据,通常JSONModel使用的比较多,现在就来简单介绍一下JSONModel的使用。

首先配上在网络请求中模型转化的代码:

FirstModel *result = [[FirstModel alloc] initWithDictionary:responseDic error:&error];

注意一:<一定要加这个方法呀,不然解析不出来,我都被坑了N次了,最好建个ji lei>
后台传过来的参数,有时候是空值,是null,此时JSONModel在解析的时候会出现崩溃的现象,此时我们可以在.m文件中加入一个类方法:

//这个方法是把所有的属性全部设置为可选值,这样就算后台传过来的值是空值,也没有关系
+ (BOOL)propertyIsOptional:(NSString *)propertyName {
    return YES;
}

注意二:在末尾


如果后台传过来的数据是这种形式的:

{
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
}

这是最简单的一种数据形式,我们只需要建立一个Object-C类,继承自JSONModel,在.h里面写上和这两个对应的属性就好了,代码如下:

#import "JSONModel.h"

@interface FirstModel : JSONModel

@property (assign, nonatomic) int      status;
@property (strong, nonatomic) NSString* title;
@property (strong, nonatomic) NSString* content;

@end

这种情况下,.m不需要做任何操作,但是,如果后台闯过来的参数比较复杂,我们想自己定义自己习惯的属性来使用,那么我们可以在.m文件中进行Key映射,例子上:
若后台传过来的数据的名字是这种形式的

{
    user_name_type = "\U6210\U529f";
    succeed = 1;
}

我们在FirstModel的.h中的代码为:

#import "JSONModel.h"

@interface FirstModel : JSONModel

@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* type;

@end

我们在.m文件中的代码为

@implementation OrderModel

+(JSONKeyMapper*)keyMapper
{
  return [[JSONKeyMapper alloc] initWithDictionary:@{
    @"user_name_type": @"type"
  }];
}

@end

模型嵌套:

{
    msg = "\U6210\U529f";
    succeed = 1;
    data = 
                 {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        };
}

此时我们需要创建两个继承自JSONModel的model类,在.h中实现如下代码:

@interface SecondModel : JSONModel
@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* msg;
@property (strong, nonatomic) FirstModel* firstModel;
@end

模型集合:

{
    msg = "\U6210\U529f";
    succeed = 1;
    data =     (
                 {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        },
         {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        }
    );
}

创建两个继承自JSONModel的model类,在.h中实现如下代码:

@protocol ThirdModel
@end

@interface ThirdModel : JSONModel
@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* msg;
@property (strong, nonatomic) NSArray<FirstModel *>* firstModels;
@end

模型嵌套+模型集合(⚠️此处有坑)

{
    msg = "\U6210\U529f";
    succeed = 1;
    data =     {
                   childList = (
                                                  {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        },
{
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        }
                 );
                 otherChildList= (
                            {
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        },
{
            content = "\U8f85\U5bfc\U5458\U6307\U5bfc\U6821\U56ed\U5c0f\U8bb0\U8005\U3001\U5c0f\U64ad\U97f3\U5458\U5728\U6821\U56ed\U5e7f\U64ad\U7ad9\n\U91c7\U7f16\U64ad\U4f18\U79c0\U513f\U7ae5\U8d44\U6e90\U5185\U5bb9\U3002";
            status = 1;
            title = "\U5c11\U5148\U961f\U5458\U4e3b\U64ad";
        }
                 );
                 
    };
}

这个模型比较复杂,字典里面套字典,字典中又套用了数组,数组中又是字典,所以我们需要把逻辑整理清楚,首先我们需要新建两个继承自JSONModel的model类分别为ForthModel和FiveModel,在ForthModel的.h中作如下操作:

@interface ForthModel : JSONModel

@property (strong, nonatomic) NSArray< FirstModel  *>* otherChildList;
@property (strong, nonatomic) NSArray< FirstModel  *>* childList;

@end

同时,我们需要在.m文件中做一个操作,不然解析不出来,代码如下:

+ (NSString *)protocolForArrayProperty:(NSString *)propertyName {
    
    if ([propertyName isEqualToString:@"childList"]) {
        return NSStringFromClass([FirstModel class]);
    }
    if ([propertyName isEqualToString:@"otherChildList"]) {
        return NSStringFromClass([FirstModel class]);
    }
    return NSStringFromClass([NSDictionary class]);
}

ForthModel中代码实现之后,实现FiveModel中的代码,在.h中做如下操作

@interface FiveModel : JSONModel
@property (assign, nonatomic) BOOL      succeed;
@property (strong, nonatomic) NSString* msg;
@property (strong, nonatomic) ForthModel* data;
@end

同时,我们需要在FiveModel的.m文件中做一个操作,不然依然解析不出来,代码如下:

+ (NSString *)protocolForArrayProperty:(NSString *)propertyName {
    
    if ([propertyName isEqualToString:@"data"]) {
        return NSStringFromClass([ForthModel class]);
    }
    return NSStringFromClass([NSDictionary class]);
}

注意:一定要在.m文件中加入这个判断,不然解析失败。

此时,模型嵌套和模型集合就解析成功。

相关文章

网友评论

本文标题:JSONModel简单使用and注意事项

本文链接:https://www.haomeiwen.com/subject/bglqfxtx.html