整理自:http://www.jianshu.com/p/93c242452b9b。

1.MJExtension的功能

字典-->模型

模型-->字典

字典数组-->模型数组

模型数组-->字典数组

2.pod导入语句 pod 'MJExtension'

3.简单的数据模型转换

Student * stu = [Student mj_objectWithKeyValues:dict];

对象的属性名字要与json中的数据一致

如果有模型中嵌套模型也是直接用这句话,访问的时候用.来访问

eg:status.retweetedStatus.user.name

4.模型中有数组属性,数组里面装其他模型

在模型StatusResult内部实现

+(NSDictionary *)objectClassInArray{

  return @{

    @"statuses":@"Status",

    @"ads":@"Ad"

  }

}

StatusResult * result = [StatusResult mj_objectWithKeyValues:dict];

这种写法不需要导入Status和Ad的头文件,冒号后面写的就是类的名字

for(Status *status in result.statuses)遍历访问

5.如果模型中的属性的名字和字典的key不同(还有多级映射)

@interface Student : NSObject

@property (copy, nonatomic) NSString *ID;

@property (copy, nonatomic) NSString *desc;

@property (copy, nonatomic) NSString *nowName;

@property (copy, nonatomic) NSString *oldName;

@property (copy, nonatomic) NSString *nameChangedTime;

@property (strong, nonatomic) Bag *bag;

@end

@interface Bag : NSObject

@property (copy, nonatomic) NSString *name;

@property (assign, nonatomic) double price;

@end

NSDictionary *dict = @{

@"id" : @"20",

@"desciption" : @"孩子",

@"name" : @{

@"newName" : @"lufy",

@"oldName" : @"kitty",

@"info" : @{

@"nameChangedTime" : @"2013-08"

}

},

@"other" : @{

@"bag" : @{

@"name" : @"小书包",

@"price" : @100.7

}

}

};

在Student中实现下面方法

+(NSDictionary *)mj_replacedKeyFromPropertyName{

return @{

@"ID" : @"id",

@"desc" : @"desciption",

@"oldName" : @"name.oldName",

@"nowName" : @"name.newName",

@"nameChangedTime" : @"name.info.nameChangedTime",

@"bag" : @"other.bag"

};

}

多级映射,前面是自定义的名字,后面是字典中的映射关系

6.将一个字典数组转成模型数组

NSArray *dictArray = @[

@{

@"name" : @"Jack",

@"icon" : @"lufy.png",

},

@{

@"name" : @"Rose",

@"icon" : @"nami.png",

}

];

NSArray *userArray = [User mj_objectArrayWithKeyValuesArray:dictArray];

for (User *user in userArray) {

NSLog(@"name=%@, icon=%@", user.name, user.icon);

}

7.将一个模型转为字典

NSDictionary *statusDict = status.keyValues;

8.将一个模型数组转成字典数组

NSArray *userArray = @[user1, user2];

NSArray *dictArray = [User keyValuesArrayWithObjectArray:userArray];

NSLog(@"%@", dictArray);

MJExtension(JSON到数据模型的自动转换)的更多相关文章

  1. IE8中JSON.stringify方法对自动转换unicode字符的解决方案

    IE8内置了JSON对象,用以处理JSON数据.与标准方法的不同,IE8的JSON.stringify会把utf-8字符转码: var str = "我是程序员" var json ...

  2. springmvc 支持对象与json 自动转换的配置

    基于maven的工程, 需要在pom.xml中添加如下依赖 <dependency> <groupId>javax.servlet</groupId> <ar ...

  3. SpringMVC关于json、xml自动转换的原理研究[附带源码分析]

    目录 前言 现象 源码分析 实例讲解 关于配置 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.c ...

  4. SpringMVC关于json、xml自动转换的原理研究

    SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC ...

  5. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

    SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...

  6. JSON字符串自动转换

    package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObj ...

  7. SpringMVC关于json、xml自动转换的原理研究[附带源码分析](使用JAXB转换XML)

    前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/spring ...

  8. SpringMVC Jackson 库解析 json 串属性名大小写自动转换问题

    问题描述 在项目开发中,当实体类和表中定义的某个字段为 RMBPrice,首字母是大写的,sql 查询出来的列名也是大写的 RMBPrice,但是使用 jquery 的 ajax 返回请求响应时却出错 ...

  9. struts2(三)之表单参数自动封装与参数类型自动转换

    前言 对struts2的使用不外乎这几点,参数自动封装,拦截器的使用,数据校验,ognl表达(值栈和actionContext的讲解),struts2的标签,struts2的国际化, struts2的 ...

随机推荐

  1. POJ 1002 - 487-3279 STL

    先把不是标准格式的字符串变成标准格式再输出出现两次以上的标准串和出现的次数不然输出 "No duplicates." #include <iostream> #incl ...

  2. POJ 1743 - Musical Theme 最长不重叠重复子串

    题意:    给出一列数据,问你其中重复的最长连续子串的长度    但是有要求:        1. 长度至少为 5 .        2. 两串可以不相等,但两串每个对应位置的数字相减差值固定 (即 ...

  3. python学习第四天 --字符编码 与格式化及其字符串切片

    字符编码 与格式化 第三天已经知道了字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采 ...

  4. DSASync: Managing End-to-End Connections in Dynamic Spectrum Access Wireless LANs

    其实跟上一篇是同一篇文章.不过上一篇是发表在IEEE Secon2010了,这篇是后来又增加了部分内容后的一版,收录在IEEE/ACM TRANSACTIONS ON NETWORKING, VOL. ...

  5. Codeforces 582B Once Again

    http://codeforces.com/contest/582/problem/B 题目大意:给出一个序列,是由一个长度为n的序列复制T次得到的,问最长非下降子序列的长度. 思路:我们建立一个n* ...

  6. Codeforces 494D Upgrading Array

    http://codeforces.com/contest/494/problem/D 题意:给一个数组,和一个坏质数集合,可以无数次地让1到i这些所有数字除以他们的gcd,然后要求Σf(a[i])的 ...

  7. 新唐的icp和isp

    ICP 的意思是 "在电路编程"(in Circuit Programming),PC 电脑可以运行 “NuMicro ICP Programming Tool”软件通过 Nu-L ...

  8. qt捕获全局windows消息(使用QAbstractNativeEventFilter,然后注册这个类)

    qt  如何捕获全屏的鼠标事件,这个帖子上面主要讲述了下嵌入式qt怎么抓取系统级消息,不过从这篇文章中我也看到了希望,有个回复说winEventFilter支持这种方式,然后我就顺着这个线索找到了na ...

  9. Unix,windows和Mac中的换行

    Unix 系统里,每行结尾只有“<换行>”,即“\n”:Windows系统里面,每行结尾是“<换行><回车 >”,即“\r\n”:Mac系统里,每行结尾是“< ...

  10. The Flat Dictionary

    The Flat Dictionary 原来的代码没处理dict为空的情况 1 def flatten(dictionary): 2 #[] is a list 3 #() is a tuple 4 ...