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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS开源JSON解析库MJExtension的更多相关文章

  1. fastjson是阿里巴巴的开源JSON解析库

    fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}&q ...

  2. iOS中JSON解析三方库的比较

    网络数据解析框架 1.  JsonModel 一个 JSON 模型转换库,有着比较简洁的接口.Model 需要继承自 JSONModel. 2.  yyModel yyModel比较轻量(算上.h 只 ...

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

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...

  4. C++的Json解析库:jsoncpp和boost(转)

    原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...

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

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

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

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

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

    C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...

  8. Tomjson - 一个"短小精悍"的 json 解析库

    Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...

  9. python 中的json解析库

    当一个json 数据很大的时候.load起来是很耗时的.python中常见的json解析库有cjson,simplesjson,json, 初步比较了一下, 对于loads来讲 simplejson ...

随机推荐

  1. LDPC编译码基本原理

    LDPC编译码基本原理     学习笔记 V1.1 2015/02/18 LDPC编译码基本原理   概述   本文是个人针对LDPC的学习笔记,主要针对LDPC译码算法做了简要的总结.该版本主要致力 ...

  2. ServiceStack.Redis 中关系操作的局限与bug

    redis是文档型的,nosql中难处理的是关系. 比如人可以发博客,博客可以有分类.按照传统sql中,用户表和分类表都是主表,博客表是从表,有用户的外键和分类的外键 如果使用文档型的思考方式. 为用 ...

  3. 【转载】利用shell脚本获取一个文件的绝对路径readlink

    转载自:http://os.chinaunix.net/a2007/1118/976/000000976787.shtml #! /bin/bash echo "Path to $(base ...

  4. django 快速实现完整登录系统(cookie)

    经过前面几节的练习,我们已经熟悉了django 的套路,这里来实现一个比较完整的登陆系统,其中包括注册.登陆.以及cookie的使用. 本操作的环境: =================== deep ...

  5. ASP.NETC#通用扩展函数之TypeParse 类型转换方便多了

    用法: var int1 = "2".TryToInt();//转换为int失败返回0 var int2 = "2x".TryToInt(); var int3 ...

  6. mysql一个事务中有DDL语句的binlog情况

      在autocommit=1的情况下,开启一个事务,如果里面有DDL语句,那么事务开始到DDL语句之间的DML语句都会被提交.再开启新的事务.可以从binlog中看出   session语句: 09 ...

  7. Mysql查询大表出现的一个错误

    第一次测试执行下面的语句时发生如下错误:bigdata里面有100万条数据 mysql> select count(*) from (select distinct(id) from bigda ...

  8. [Bootstrap]7天深入Bootstrap(4)CSS组件

    Bootstrap框架的三大核心之二:组件. 组件也是最核心的地方,因为绝大部分的网页都必须利用组件才能构建出绚丽的页面. 组件包括:Icon图标(Glyphicon). 下拉菜单(Dropdown) ...

  9. 数论 - 素数的运用 --- poj 2689 : Prime Distance

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12512   Accepted: 3340 D ...

  10. C# 生成BMP图片

    ;i<;i++) { Bitmap bmp=new Bitmap(this.pictureBox1.Image); Graphics g=Graphics.FromImage((Image)bm ...