关于iOS上的对象映射公用方法-备
具体的使用方法,请见下面说明,或者见工程里的单元测试代码。或者,参考原始文档:
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上的对象映射公用方法-备的更多相关文章
- document.onclick在ios上不触发的解决方法与touchstart点击穿透处理
document.onclick = function (e) { var e = e ? e : window.event; var tar = e.srcElement || e.target; ...
- iOS:LKDBHelper实体对象映射数据库-第三方框架(在FMDB的基础上进行二次封装)
一 插件简介: 其github地址:https://github.com/li6185377/LKDBHelper-SQLite-ORM 全面支持 NSArray,NSDictionary, Mode ...
- iOS中僵尸对象的实现方法
什么是僵尸对象?所谓僵尸,就是过度释放的对象.在ios开发中,僵尸对象对于开发人员调试程序来说很有用.我们通常将NSZombieEnabled环境变量设置为YES来打开僵尸对象,但这会导致所有的对象都 ...
- Java之所有对象的公用方法>10.Always override toString
providing a good toString implementation makes your class much more pleasant to use. It is recommend ...
- Java之所有对象的公用方法>9.Always override hashCode when you override equals
You must override hashCode in every class that overrides equals.
- 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 ...
- IOS发送Email的两种方法-备
1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时 ...
- 深度学习之Matlab 转C++在iOS上測试CNN手型识别
1 前言 在上一篇Blog.我介绍了在iOS上执行CNN的一些方法. 可是,一般来说.我们须要一个性能强劲的机器来跑CNN,我们仅仅只是须要将得到的结果用于移动端. 之前在Matlab使用UFLDL的 ...
- 【转】iOS 上常用的两个功能:点击屏幕和return退出隐藏键盘和解决虚拟键盘挡住UITextField的方法
iOS上面对键盘的处理很不人性化,所以这些功能都需要自己来实现, 首先是点击return和屏幕隐藏键盘 这个首先引用双子座的博客 http://my.oschina.net/plumsoft/blog ...
随机推荐
- 2014-08-22 关于Response、Request等对象在cs文件中的使用
今天是在吾索实习的第33天.已经有一段时间没写过博客了,今天突然想起个值得分享的东西,所以又华丽地回归了. 废话不多说了,直奔主题.我们会发现,在我们在cs文件中,直接使用Response.Reque ...
- 《算法实战策略》-chaper19-队列、栈和双端队列
对于计算机专业的学生来说,他们一定会很熟悉一句话:程序设计 = 算法 + 数据结构.而根据笔者的理解,所谓程序设计其实就是为了编程解决实际问题,所谓算法是一种解决问题某种思维的方法,但是思维需要得到编 ...
- Hotel - poj 3667(求连续子区间)
题意:有两种操作 1,从左往右找一个区间是 D 的连续序列,然后覆盖,返回区间最前面的数,如果没有输出0 2, 释放从L开始连续D的区间 分析:就是从左往右查找一个D的连续区间,可以使用三个值操作ls ...
- web service1简单的例子用jdk自带的类
1,建立自己的java项目my_service 2,建立包,com.hjg.service 3,创建类: IMyService.java package com.hjg.service; import ...
- php中的后期静态绑定("Late Static Binding")
在我们以往中,在类中使用self关键字的时候都是指向了被调用方法定义时的类,而非原始的调用类. 例如: class Animal{ static $IQ_lv_avg = 1; public stat ...
- (转)Maven实战(三)Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...
- 与useradd命令相关的两个默认配置文件
Configuration Files for User Management Defaults When working with tools as useradd, some defaul ...
- sass笔记-2|Sass基础语法之让样式表更具条理性和可读性
这一篇主要详述保持sass条理性和可读性的3个最基本方法--嵌套.导入和注释. 零. 变量 变量本身的作用是为了保持属性值的可维护性,把所有需要维护的属性值放在同一个地方,快速更改,处处生效,可谓售后 ...
- OD: SafeSEH
SafeSEH 对异常处理的保护原理 在 Windows XP sp2 以及之后的版本中,微软引入了 S.E.H 校验机制 SafeSEH.SafeSEH 需要 OS 和 Compiler 的双重支持 ...
- ajax调用webservice(二) 跨域。
所需工具与项目结构同(一). service.asmx中代码如下: using System; using System.Collections.Generic; using System.Web; ...