iOS中JSON与NSObject互转有两种方式:1、iOS自带类NSJSONSerialization 2、第三方开源库SBJSON、JSONKit、MJExtension。项目中一直用MJExtension来进行JSON与Model的互转,非常方便、强大,接下来介绍一下这个轻量、强大的开源库。

1、什么是MJExtension?

MJExtension是一套字典和模型之间互相转换的轻量级开源框架,github地址为:GitHub - CoderMJLee/MJExtension: A fast。功能如下:

JSON --> Model、Core Data Model

JSONString --> Model、Core Data Model

Model、Core Data Model --> JSON

JSON Array --> Model Array、Core Data Model Array

JSONString --> Model Array、Core Data Model Array

Model Array、Core Data Model Array --> JSON Array

Model Coding(归档和接档)

MJExtension特性在于JSON与Model的互转,避免了用NSJSONSerialization或者SBJSON、JSONKit等非Model解析库把JSON解析出成NSDictionary后到处用valueForKey或者objectForKey方法获取字段相应值所带来的麻烦,尤其是要在不同类之间传输数据的时候,传Model比传NSDictionary这种方式实在是方便优雅太多了

2、MJExtension架构

1)UML类图

2)类介绍

NSObject+MJKeyValue(Model辅助类,提供字典字段到Model相应的属性转换)

NSObject+MJProperty(Model辅助类,封装Model属性操作)

MJProperty(Model属性封装类)

MJType(Model属性类型封装类)

NSObject(MJCoding)(Model归档和解档封装类)

3、MJExtension JSON转Model流程图

4、MJExtension用法举例

关于用法详情请见:GitHub - CoderMJLee/MJExtension: A fast。我这里只介绍两种常用的用法,JSON转Model,JSON转Model数组

@interface PersonModel : NSObject

@property (nonatomic, copy) NSString* name;

@property (nonatomic, copy) NSString* sex;

@property (nonatomic, copy) NSString* age;

- (void)fetchPerson

{

__weak typeof(self)weakSelf = self;

fetchPersonRequest* request = [[fetchPersonRequest alloc] init];

[request startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {

NSDictionary* dic = [request.responseString JSONObject]; // request.responseString JSONString->NSDictionary

if (dic && ([[dic valueForKey:@"result"] integerValue] == 0))

{

weakSelf.personModel = [PersonModel objectWithKeyValues:[dic valueForKey:@"data"]]; //personModel为PersonModel对象,跟后台约定data字段为字典

//weakSelf.personModelArr = [PersonModel objectArrayWithKeyValuesArray:[dic valueForKey:@"data"]]; //personModelArr为PersonModel数组,跟后台约定data字段为字典数组

}

}

文/52xpz(简书作者)
原文链接:http://www.jianshu.com/p/5854081f052f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载于:https://www.cnblogs.com/soulDn/p/5787559.html

iOS开源JSON解析库MJExtension相关推荐

  1. IOS中Json解析的四种方法

    2019独角兽企业重金招聘Python工程师标准>>> 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此& ...

  2. 【转】IOS中Json解析的四种方法

    原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有 ...

  3. C++的Json解析库:jsoncpp和boost

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...

  4. [转]C++的Json解析库:jsoncpp和boost

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...

  5. C++的Json解析库:jsoncpp

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org/,本文不再对json做介绍,将重点介绍c++的 ...

  6. C++的Json解析库:jsoncpp和boost .

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org/,本文不再对json做介绍,将重点介绍c++的 ...

  7. ios json包含html,IOS中Json解析的四种方法

    发现自己有很多文档,所以现在整理一下,以防忘了... 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http: ...

  8. gson解析天气json_几种常用JSON解析库性能比较

    PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...

  9. 深入 Go 中各个高性能 JSON 解析库

    深入 Go 中各个高性能 JSON 解析库 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/535 其实本来我是没打算 ...

最新文章

  1. php pdo blob,PHP / PDO / MySQL:插入MEDIUMBLOB存储坏数据
  2. python绘图函数m_python绘图数据m
  3. JS实现2,8,10,16进制的相互转换
  4. 201671010406 丁家辉《英文文本统计分析》结对项目报告
  5. sql动态拼接<if>标签嵌套<foreach>判空、if失效等问题
  6. websocket 带头部信息请求 header_关于websocket跨域的一个奇怪问题
  7. 新分类!全总结!最新Awesome-SLU-Survey资源库开源!
  8. 2001年分区联赛提高组之二_数的划分_ssl1016_dfs
  9. Linux命令_搜索文件
  10. C/C++程序之根据有向图、无向图求通路、回路、可达矩阵
  11. Unity3d 周分享(22期 2019.8.30 )
  12. JAVAFX的webview中的webkit支持WindowsXP系统
  13. linux怎样安装麒麟双系统,win10系统装麒麟系统双系统的具体办法
  14. 画图软件origin-柱状图断点设置
  15. multisum 残留 there are no notifications for your products
  16. 使用 Abp.Zero 搭建第三方登录模块(一):原理篇
  17. 关于outlook 保存的.msg文件打开一次之后不能再次打开的问题
  18. Azure机器学习模型搭建
  19. 用MDA理论分析炉石的职业系统
  20. 做谷歌广告投放关键字英文,只懂英文可以吗?

热门文章

  1. Fragment提交transaction导致state loss异常
  2. Spring AOP详解(转载)所需要的包
  3. 批处理解决“易语言难题”
  4. Spring Initializr 构建Spring Boot/Cloud工程
  5. DotNetCore跨平台~System.DrawingCore部署Linux需要注意的
  6. 编译安装Zabbix 2.2 (LNMP环境)
  7. Android学习笔记之Android Studio添加新的Activity
  8. 业界对生成图片缩略图的做法归纳
  9. 商贸通服装鞋帽版客户端无法连接服务器的问题(自己遇到的,已解决)
  10. 关于C#中的DLLImport (引)