当前位置: 首页 > 编程日记 > 正文

iOS开源JSON解析库MJExtension

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

相关文章:

针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言439-448条如下:

439,彩虹一号无人机实现人类永不落地的追求 日媒:中国亮出杀手锏 世界各国一直在研究提高飞机的续航能力 国内研制的彩虹一号无人机采用人工智能和其他高新技术,飞行高度30000米,并终于研制成功实现人类永不落地的追求。 440&a…

Asp.Net中查询域名的Whois信息

作者&#xff1a;活靶子 出处&#xff1a;AspxBoy.Com 演示http://www.aspxboy.com/whois.aspx拷贝代码请到这里 http://www.aspxboy.com/WhoisCode.htm<% Page Language"C#" %><% Import Namespace"System.Net.Sockets" %><% Import …

Python 安装 xlsx模块

为什么80%的码农都做不了架构师&#xff1f;>>> Python 安装 xlsx模块 很多时候自动化测试时测试用例是写在excel中的如何读取转换成字典是一个比较关键的问题&#xff0c;使用pip命令安装模块如下&#xff1a;pip install openpyxl 验证使用的python代码如下&…

利用WebClient和WebRequest类获得网页源代码C#

作者&#xff1a;不详 请速与本人联系 GetPageHtml.aspx<% Page language"c#" validateRequest "false" Codebehind"GetPageHtml.aspx.cs" AutoEventWireup"false" Inherits"eMeng.Exam.GetPageHtml" %><!DO…

针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言449-456条如下:

449&#xff0c;IBM发布重磅产品&#xff1a;推出新的人工智能能力。IBM研发AI向用户提供自动化的运维&#xff08;生态&#xff09;服务。 IBM新任CEO Arvind Krishna5月6日在IBM举办的“Think digital”大会上说&#xff1a;IBM致力于帮助企业&#xff08;用户&#xff09;加…

POI如何使用已有Excel作为模板二三事

关于POIPOI是Apache的一个开源项目&#xff0c;起初的目标是允许用户使用java代码来对Excel进行操作&#xff0c;发展到今天POI本身支持的范围已经逐步扩展到对Microsoft Office主要产品&#xff0c;包括&#xff1a;Excel\Word\PPT\Visio的全面支持&#xff0c;目前稳定版本为…

Graphviz样例之无向图

Graphviz是一个开源软件&#xff0c;有源码&#xff0c;支持不同平台。linux系统下使用XDot程序显示dot格式的文件。 Graphviz显示图形时&#xff0c;可以选择不同的策略进行布局和布线显示图形。 Graphviz的官方网站&#xff08;点击进入&#xff09;&#xff1a;Graphviz | G…

使用command-privilege给H3C、华为设备的用户帐号授权

一、H3C设备的权限默认分为0-3这四种级别 数值越小&#xff0c;用户的级别越低 (1)访问权限0 级 : ping、tracert、telnet 等网络诊断小程序&#xff0c;不可以dis current (2)监控权限 1级: dis current、reset、可开debug这种高级系统诊断工具&#xff0c;不能进入system视图…

针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言457-465条如下:

457&#xff0c;常识推理攻关进展 人工智能要变得像人一样聪明常识推理能力是必备的 机器缺乏常识推理&#xff0c;何时到了破局的时候&#xff1f;&#xff01;这是迄今为止一直困扰人工智能50多年的难题。 OpenAI于去年发布GPT—2&#xff0c;它是一个具有15亿参数的通用语…

使用 Global.asax 文件

作者&#xff1a;未知 请速与本人联系 Global.asax 文件 除了编写 UI 代码外&#xff0c;开发人员还可以将应用程序级别的逻辑和事件处理代码添加到他们的 Web 应用程序中。此代码不处理 UI 的生成&#xff0c;并且一般不为响应个别页请求而被调用。相反&#xff0c;它负…

安装hadoop下的sqoop1.99.3及配置问题全解决

2016年8月27日&#xff0c;解决sqoop先下载的是sqoop1.99.7&#xff0c;结果配置的时候&#xff0c;出现了没有server/conf目录&#xff0c;以及启动时出现无法配置错误./bin/sqoop.sh server startyqubuntu:/opt/sqoop-1.99.7$ ./bin/sqoop.sh server startSetting conf dir: …

让Asp.NET的DataGrid可排序、可选择、可分页

‘***************************************************************‘Author: 李洪根‘MAIL: lihonggen0gci-corp.com‘专栏&#xff1a; http://www.csdn.net/develop/author/netauthor/lihonggen0/‘如需引用&#xff0c;请指明出处&#xff01; CSDN论坛VB版欢迎您&#…

asp.net mvc 3 unobtrusive client side validation not working in IE

http://stackoverflow.com/questions/5909260/jquery-1-6-form-validate-not-working-in-ie7-ie8 http://stackoverflow.com/questions/7008970/asp-net-mvc-3-unobtrusive-client-side-validation-not-working-in-ie

针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言477-486条如下:

477&#xff0c;国产自动驾驶操作系统首获国际认证。 华为自动驾驶操作系统&#xff08;含虚拟化机制&#xff09;己获Safety领域最高等级功能安全认证&#xff08;ISO26262ASILD&#xff09;。 这也是我国首个获得ASILD认证的操作系统内核。 自动驾驶领域已经不再是传统汽车…

TYVJ 矩阵取数 Label:高精度+dp

题目描述 帅帅经常跟同学玩一个矩阵取数游戏&#xff1a;对于一个给定的n*m的矩阵&#xff0c;矩阵中的每个元素aij均为非负整数。游戏规则如下&#xff1a; 1.每次取数时须从每行各取走一个元素&#xff0c;共n个。m次后取完矩阵所有元素&#xff1b; 2.每次取走的各个元素只能…

一个鼠标类( Using C# and Win32API)

作者&#xff1a;网际浪子 出处&#xff1a;网络 namespace ClassLibrary.Hardware { // 原创 Using C# and Win32API ( 最近我把所有的Win32API看了1遍 很是过瘾 ) public class Mouse { internal const byte SM_MOUSEPRESENT 19; internal const byte SM_CMOUSEBU…

用Python轻松搞定Excel中的20个常用操作

来源 |早起Python&#xff08;ID: zaoqi-python&#xff09;Excel与Python都是数据分析中常用的工具&#xff0c;本文将使用动态图(Excel)代码(Python)的方式来演示这两种工具是如何实现数据的读取、生成、计算、修改、统计、抽样、查找、可视化、存储等数据处理中的常用操作&a…

vb inet 一些方法

引用:http://apps.hi.baidu.com/share/detail/14791249 使用 Internet Transfer 控件 Internet Transfer 控件实现了两种广泛使用的 Internet 协议&#xff1a; 超文本传送协议&#xff08;HyperText Transfer Protocol&#xff09;(HTTP) 和文件传送协议&#xff08;File Tran…

blogs第一天

纪念一下转载于:https://www.cnblogs.com/wandezhi/p/5819780.html

技术直播:1小时突击Java工程师面试核心(限免报名)

后疫情时代&#xff0c;连程序员这个多金的职业也遭受到了一定程度的打击。从各大招聘网站和多次面试经历中&#xff0c;相信大家已经意识到&#xff0c;面试官对程序员技能体系和项目经验考核似乎更严苛了。你在面试中常常为什么苦恼呢&#xff1f;简历撰写&#xff1f;数据算…

随笔之如何实现一个线程池

为什么80%的码农都做不了架构师&#xff1f;>>> 一 缘由&#xff1a; 最近因工作问题&#xff0c;需要实现一个简单的线程池&#xff0c;满足一下要求&#xff0c; 可伸缩&#xff0c;即一旦发现线程不够用&#xff0c;则可以动态增加线程。&#xff08;至于缩减线…

url传递中文的解决方案

作者&#xff1a;xrascal 出处&#xff1a;aspxcn url传递中文的解决方案 1.设置web.config文件。&#xff08;我不喜欢设置成这样&#xff09; <system.web> ...... <globalization requestEncoding"gb2312" responseEncoding"gb2312" cult…

要哭了,模拟器键盘一直不显示

为什么80%的码农都做不了架构师&#xff1f;>>> 今天第一次遇见模拟器键盘不显示&#xff0c;导致应用对键盘的通知监听没任何卵用&#xff0c;搞了很久还是找不到原因&#xff0c;泪崩&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 最后检查到是…

用机器学习还原《隐秘的角落》那些被修改的台词

来源 | 东泽聊技术责编 | Carol前两天&#xff0c;作者一口气看完了电视剧《隐秘的角落》&#xff0c;剧情相当精彩。美中不足的是&#xff0c;剧组为了让片子过审&#xff0c; 导致11集&#xff0c;12集的剪辑顺序被打乱&#xff0c;甚至台词被修改&#xff0c;以至于片中有几…

在ASP.NET下实现数字和字符相混合的验证码

作者&#xff1a;kwklover&#xff08;原作&#xff09; 出处&#xff1a;CSDN 在ASP.NET下实现数字和字符相混合的验证码 经常在论坛里看到有问怎么实现验证码的帖子,其实关于验证码的文章在CSDN,DEV-CLUB等网站上都有很多,但是很多文章只讲诉了如何输出一个随机生成数字…

多节点CDN缓存加速系统wdcdn2.4版本发布(20111213)

多节点CDN缓存加速系统wdcdn2.4版本发布(20111213) Wdcdn是一套基于Linuxapachesquid架构开发的CDN缓存加速系统及管理系统 可帮助大中小站长或大中小企业低成本&#xff0c;快速简单&#xff0c;构建自己的CDN网络及服务器群,提供更好的在线服务,更快速的网络和网站,我们也致力…

Attribute在.net编程中的应用

作者&#xff1a;niwalker 出处&#xff1a;csdn SqlCommandGenerator类的设计 SqlCommandGEnerator类的设计思路就是通过反射得到方法的参数&#xff0c;使用被SqlCommandParameterAttribute标记的参数来装配一个Command实例。 引用的命名空间&#xff1a;//SqlCommandG…

RouterOS连载3:架设PPPoE服务

让ROS提供PPPoE服务&#xff0c;可对客户端提供类似ADSL的认证上网方式。具体设置步骤如下&#xff1a; 一、创建地址池 从Winbox联入ROS&#xff0c;单击“IP”&#xff0d;〉“Pool”,如下图 打开“IP Pool”对话框 单击“”按钮&#xff0c;添加地址池,Name: pppoepool1 …

免费技术直播:唐宇迪带你一节课了解机器学习经典算法

常常有小伙伴在后台反馈&#xff1a;机器学习经典算法有哪些&#xff1f;自学难度大又没有效果&#xff0c;该怎么办&#xff1f;CSDN为了解决这个难题&#xff0c;联合唐宇迪老师为大家带来了一场精彩的直播【一节课掌握机器学习经典算法-线性回归模型】。本次直播将帮大家了解…

初学markdown

分段与标题 分段 正如markdown文档所说的&#xff0c;段落是由若干行组成的&#xff0c;段落之间以一行空行分开。(也就是每一段的前后都要有一个空行) 一个 Markdown段落是由一个或多个连续的文本行组成&#xff0c;它的前后要有一个以上的空行&#xff08;空行的定义是显示上…