JSONModel使用总结

@interface JSONModel :NSObject <AbstractJSONModelProtocol>

/ 创建一个新的模型实例,并初始化它的JSON文本参数使用UTF8编码

  -(instancetype)initWithString:(NSString*)string error:(JSONModelError**)err;

// 创建一个新的模型实例,并初始化它的JSON文本参数使用给定的编码

  -(instancetype)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err;

// required协议方法,通过字典实例化模型

  -(instancetype)initWithDictionary:(NSDictionary*)dict error:(NSError **)err;

// 讲模型内容导出到字典

  -(NSDictionary*)toDictionary;

// 导出所有模型到json数据,并返回

  -(NSString*)toJSONString;

// 讲装有字典的数组一次实例化对应的模型存在数组里

  +(NSMutableArray*)arrayOfModelsFromDictionaries:(NSArray*)array;

// 将装有模型的数组中模型数据转为字典存入数组

  +(NSMutableArray*)arrayOfDictionariesFromModels:(NSArray*)array;


  -(NSString*)indexPropertyName;

  -(BOOL)isEqual:(id)object;

 -(NSComparisonResult)compare:(id)object;

-(BOOL)validate:(NSError**)error;

// 如果你的属性名称不匹配你的JSON模型关键的名字

+(JSONKeyMapper*)keyMapper;

+(void)setGlobalKeyMapper:(JSONKeyMapper*)globalKeyMapper;

// 如果Model中有多余的属性,不用考虑;

+(BOOL)propertyIsOptional:(NSString*)propertyName;

+(BOOL)propertyIsIgnored:(NSString*)propertyName;



@interface JSONKeyMapper :NSObject

// toModel将JSON键名转换为模型属性名  toJSON将模型属性名转换为一个JSON键

-(instancetype)initWithJSONToModelBlock:(JSONModelKeyMapBlock)toModel

                       modelToJSONBlock:(JSONModelKeyMapBlock)toJSON;


// 创建一个JSONKeyMapper实例,基于您提供的映射,在映射参数。使用JSON键名称作为键,你的JSONModel属性名称作为值。{ @“crazy_JSON_name”:@“myCamelCaseName”}

-(instancetype)initWithDictionary:(NSDictionary*)map;

// 讲下划线转换为驼峰命名方式

+(instancetype)mapperFromUnderscoreCaseToCamelCase;

下面两段代码都可以实现匹配 

+(JSONKeyMapper*)keyMapper2 {

    NSDictionary *dict =@{

                           @"address" :@"address",

                           @"author.header_img" :@"authorHeaderImage",

                           @"author.uid" :@"authorUserId",

                           @"author.username" :@"authorauthorUsername",

                           @"city" :@"city",

                           @"city_id" :@"cityId",

                           @"cover_img" :@"coverImg",

                           };

    JSONKeyMapper *mapper = [[JSONKeyMapperalloc] initWithDictionary:dict];

    return dict;

}

// 重写了影射规律

+(JSONKeyMapper*)keyMapper {

    /* 注意JuhuiModel里面需要映射2种类型

     1. 驼峰Camel命名规范

     2. author.header_imgauthor_username要映射到JuhuiModel直接字段里面 */

    JSONKeyMapper *mapper = [JSONKeyMappermapperFromUnderscoreCaseToCamelCase];

    // 取得影射的blocks对象

    JSONModelKeyMapBlock modelBlock = mapper.modelToJSONKeyBlock;

    

    // 根据上述的重新创建映射条件

    JSONKeyMapper *newMapper = [[JSONKeyMapperalloc] initWithJSONToModelBlock:nilmodelToJSONBlock:^NSString *(NSString *keyName) {

        // 告诉我们映射规律

        if ([keyNameisEqualToString:@"authorHeaderImage"]) {

            return@"author.header_img";

        } elseif ([keyName isEqualToString:@"authorUsername"]) {

            return@"author.username";

        } elseif ([keyName isEqualToString:@"authorUserId"]) {

            return@"author.uid";

        } elseif ([keyName isEqualToString:@"coverImage"]) {

            return@"cover_img";

        } elseif ([keyName isEqualToString:@"desc"]) {

            return@"descript";

        }

        return modelBlock(keyName);

    }];

    return newMapper;

}

另外,使用时创建Model继承jsonmodel,根据项目中需求,在model中重写jsonModel的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值