具体的使用方法,请见下面说明,或者见工程里的单元测试代码。或者,参考原始文档:

https://github.com/mystcolor/JTObjectMapping

使用方法

========

绝大多数情况下,需要用到的就是一个方法:

[NSObject objectFromJSONObject:stateObject mapping:nil];

其中,把NSObject换成我们想映射成的类的名字。

稍微复杂一点,假设类的属性和JSON里的key名字不是一一对应的,那么就要写一个映射关系表作为mapping参数:

NSDictionary *mapping = [NSDictionary dictionaryWithObjectsAndKeys:

@"myState", @"state",

@"movieList", @"movie",

nil];

[NSObject objectFromJSONObject:stateObject mapping:mapping];

如果再复杂一点,我们需要映射一个数组,数组的每个元素映射到一个对象,那么就用到第2个方法:

[NSObject mappingWithKey:@"responseState" mapping:nil]

同样,把NSObject换成数组元素对应的类,key是用来存放整个数组的那个属性。

注意

====

JSON里的字符串,是能自动映射成NSNumber或者int型的,不需要特别写代码。如果想把一个字符串日期,映射成NSDate型,请参考原始文档。

具体举个例子

===========

假设我们有这样一段JSON:

{

"state":[

{

"respCode":"0000",

"respMsg":"1"

}

],

"movie":[

{

"body":"    一开始,这只是叶问的故事他生于佛山",

"pics":"/images/jz/4779-1-20121225133147.jpg,/images/jz/4779-2-20121225133147.jpg",

"name":"一代宗师",

"movid":"4779",

"length":"120",

"hasplan":"1",

"trailor":"/4779.m4v",

"director":"梁朝伟 章子怡 张震 ",

"type":"动作/传记/剧情/IMAX",

"url":"http://img.fun-guide.mobi/show?src=http://zhaohang.fun-guide.mobi:8080/tm/images/hb/4779-20121225133147.jpg&w=140",

"popularity":"6"

},

{

...

}

]

}

现在,想把它映射到自定义的对象中去。有几种情况:

第一种情况,简单地把state数组里面的第一个元素映射成一个FGStateModel类

那么就是,取出这个节点:

NSDictionary *stateObject = [[self.json objectForKey:@"state"] objectAtIndex:0];

然后,执行映射:

self.state = [FGStateModel objectFromJSONObject:stateObject mapping:nil];

第二种情况,把movie这个字典数组映射成一个数组,数组的每个元素是FGMovieModel

NSArray *movieObject = [self.json objectForKey:@"movie"];

self.movieList = [FGMovieModel objectFromJSONObject:movieObject mapping:nil];

第三种情况,如果对象的属性和JSON名字不一样,可以使用映射表,例如我们想把上面整个json对象映射成一个 FGResponseModel 对象,其中,state数组映射成 responseState 属性,movie 数组映射成 movieList 属性。那么,我们需要告诉映射器这个数组里的元素要映射成什么对象。

所以,通过 mapping 这个参数告诉它:“请把 JSON 里的 state 数组里的每个元素映射成一个 FGStateModel 对象,并且把最终的数组放到responseState这个属性里。另外,把 movie 这个数组映射成一个 FGMovieModel 数组,并且保存到 movieList 这个属性中。“

NSDictionary *mapping = [NSDictionary dictionaryWithObjectsAndKeys:

[FGStateModel mappingWithKey:@"responseState" mapping:nil], @"state",

[FGMovieModel mappingWithKey:@"movieList" mapping:nil], @"movie",

nil];

self.response = [FGResponseModel objectFromJSONObject:self.json mapping:mapping];

关于iOS上的对象映射公用方法-备的更多相关文章

  1. document.onclick在ios上不触发的解决方法与touchstart点击穿透处理

    document.onclick = function (e) { var e = e ? e : window.event; var tar = e.srcElement || e.target; ...

  2. iOS:LKDBHelper实体对象映射数据库-第三方框架(在FMDB的基础上进行二次封装)

    一 插件简介: 其github地址:https://github.com/li6185377/LKDBHelper-SQLite-ORM 全面支持 NSArray,NSDictionary, Mode ...

  3. iOS中僵尸对象的实现方法

    什么是僵尸对象?所谓僵尸,就是过度释放的对象.在ios开发中,僵尸对象对于开发人员调试程序来说很有用.我们通常将NSZombieEnabled环境变量设置为YES来打开僵尸对象,但这会导致所有的对象都 ...

  4. Java之所有对象的公用方法>10.Always override toString

    providing a good toString implementation makes your class much more pleasant to use. It is recommend ...

  5. Java之所有对象的公用方法>9.Always override hashCode when you override equals

     You must override hashCode in every class that overrides equals.

  6. Java之所有对象的公用方法>8.Obey the general contract when overriding equals

    Overriding the equals method seems simple, but there are many ways to get it wrong, and consequences ...

  7. IOS发送Email的两种方法-备

    1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时 ...

  8. 深度学习之Matlab 转C++在iOS上測试CNN手型识别

    1 前言 在上一篇Blog.我介绍了在iOS上执行CNN的一些方法. 可是,一般来说.我们须要一个性能强劲的机器来跑CNN,我们仅仅只是须要将得到的结果用于移动端. 之前在Matlab使用UFLDL的 ...

  9. 【转】iOS 上常用的两个功能:点击屏幕和return退出隐藏键盘和解决虚拟键盘挡住UITextField的方法

    iOS上面对键盘的处理很不人性化,所以这些功能都需要自己来实现, 首先是点击return和屏幕隐藏键盘 这个首先引用双子座的博客 http://my.oschina.net/plumsoft/blog ...

随机推荐

  1. hyperVisors

    容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求 期望继续进军中国市场 就像IBM公司,惠普公司和戴尔公司在中国服务器市场的霸主地位一样,Inspu ...

  2. php 中的$argv与$argc

    例如 php test.php as a joke print_r($argv); echo $argc; print_r($argv); array_shift($argv); echo $argc ...

  3. web前端面试试题总结---css篇

    CSS 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种, IE 盒子模型.W3C 盒子模型: (2)盒模型: 内容(content).填充(padding).边界(m ...

  4. Java 数量为5的线程池同时运行5个窗口买票,每隔一秒钟卖一张票

    /** * 1.创建线程数量为5的线程池 * 2.同时运行5个买票窗口 * 3.总票数为100,每隔一秒钟卖一张票 * @author Administrator * */ public class ...

  5. POJ 2001 Shortest Prefixes(字典树)

    题目地址:POJ 2001 考察的字典树,利用的是建树时将每个点仅仅要走过就累加.最后从根节点開始遍历,当遍历到仅仅有1次走过的时候,就说明这个地方是最短的独立前缀.然后记录下长度,输出就可以. 代码 ...

  6. Android实现计时与倒计时(限时抢购)的几种方法

    在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢? 在一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法通用,但 ...

  7. Android开发中,有哪些让你觉得相见恨晚的方法、类或接口?

    ThumbnailUtils.extractThumbnail(bitmap, width, height); 压缩图片到指定大小的方法,以前都是一次次的createbitmap,然后用matrix去 ...

  8. Linux popen/pclose

    popen() 函数 #include <stdio.h>FILE * popen(const char *command , const char *type );int pclose( ...

  9. 递归---NYOJ-90整数划分(一)

    这个题理解了好大会才理解,看了网上的代码,不太理解,但是后来看了好几个人的, 大同小异吧,慢慢的就理解了. 思路: 递归函数的意思是, 将 n 划分为最大数为 m 的划分数, 可以分几种情况 1. 当 ...

  10. Linux中命令行编译java接口总是提示找不到符号的疑难杂症的解决

    今天学习java的接口,在linux的命令行下写代码练练手吧,啪啪啪一顿猛敲,写了一个接口UsbInserface,UDisk继承UsbInterface,写完了那就编译到bin目录呗. 当时写程序的 ...