【Android眼中的IOS】IOS开发快速解析Json数据(仿Android解析流程)
来源:互联网 发布:2015公安部上牌数据 编辑:程序博客网 时间:2024/05/22 14:14
引言(想直接看方法的可跳到后面)
在开发过程当中,几乎避免不了的就是与各种数据打交道,数据的结构载体Json由于轻量简便,大家都在广泛使用。
例如我们要解析如下的Json数据:
{ "respCode": "0", "respMsg": "获取成功", "data": { "id": "999999", "name": "张三", "age": 23 } }
Android版本
这里简要说下Android开发过程中我非常喜欢的一种实现json解析的方式(以Gson库解析为例)
- Json数据转化为Class结构
- 网络获取相应数据
- 使用Gson解析为Class实例
我们先把以上数据转化为java文件
public class Model { String respCode; String respMsg; Data data; class Data { String id; String name; int age; }}之后使用Gson库解析以上Json字符串Gson gson = new Gson();Model model= gson.formJson("以上举例的Json字符串",Model.class);之后就可以使用model这个实例做任何事了
当然,手写class结构那就out了,这里推荐大家两个工具生成相应的类
一个是 jsonschema2pojo
一个是AndroidStudio中的插件GsonFormat
当然使用的方法自行百度
IOS版本
Android开发我习惯这么做,最近在接触IOS开发,有太多相同的地方,依样画葫芦的实现
1.Json数据转化为swift3中的struct或class
//struct是值类型,class是引用类型,如值不怎么需要改变的话用struct效率会高点//这里就用struct举例,当然struct关键字换成class就一样了struct Model{ var data: Data? var respCode: String? var respMsg: String?}struct Data{ var id: String? var name: String? var age:Int?}
然后就可以使用Swift3自带的Json解析语法,当然那样比较麻烦这里就不细说了,
手写struct也是效率非常慢的,这里就推荐大家使用一个工具
https://github.com/zadr/j2s(免费)
下载下来导入到xcode安装就可以使用
这里就不多做介绍,而且有了源码之后就可以自定义自己的结构了
2.Json数据转化为struct(或class)实例
这里向大家推荐一个
阿里巴巴开源库https://github.com/alibaba/HandyJSON
当然具体用发我这里就不细说了
之后struct就变成这样
struct Model: HandyJSON { var data: Date? var respCode: String? var respMsg: String?}struct Date: HandyJSON { var id: String? var name: String? var age:Int?}-----------分割线 //拿到了实例就能想干啥就干啥了let model = BaseType.deserialize(from: "最上面举例的Json字符串")
当然还有更高效的做法,我们每个结构体都要实现: HandyJSON
协议也非常麻烦,我们可以使用到之前提到的j2s工具了,源代码下载下来后改造如成如下所示
public var description: String { let typeName = name.generatedClassName() var d = "" properties.flatMap { (json) -> String? in if case .date(_, let format) = json.underlying { return format } return nil } .forEach { d += "\nprivate let \(typeName)DateFormatter\(abs($0.hashValue)): DateFormatter = {" d += "\n\tvar dateFormatter = DateFormatter()" d += "\n\tdateFormatter.dateFormat = \"\($0)\"" d += "\n\treturn dateFormatter" d += "\n}()\n\n" } d += "struct \(typeName): HandyJSON {" d += "\(propertyDeclarationCode)\n" d += "\n" d += "}\n" return d }
不想要相应的扩展也可以研究下代码把生成步骤注释掉即可,编译项目
最后如图所示
怎么样,是不是很方便呢
- 【Android眼中的IOS】IOS开发快速解析Json数据(仿Android解析流程)
- IOS开发:解析服务器端的json数据
- iOS开发的Json数据解析问题
- Android开发--Json数据的解析
- IOS解析Json数据
- IOS-----> Json数据解析
- ios json数据解析
- iOS json数据解析
- ios json数据解析
- iOS解析json数据
- iOS JSON数据解析
- iOS开发 - JSON解析
- iOS开发,json解析
- IOS开发之Json数据解析
- 【iOS开发-网络】解析json数据
- 【数据解析】Android Json数据的解析
- iOS开发之xml数据解析的基本流程
- iOS开发中对JSON解析数据的处理
- shell基础-bash基本功能-历史命令与补全
- 生物芯片(关灯问题 质因数分解定理)
- build.gradle配置
- 运算符的学后总结
- spring 源码如何导入到eclipse
- 【Android眼中的IOS】IOS开发快速解析Json数据(仿Android解析流程)
- 20Demo01 一个基于HXFlow的Demo
- [LeetCode]453. Minimum Moves to Equal Array Elements
- MySQL主从复制-双主结构
- 【JavaScript】性能优化篇
- 在O(1)时间复杂度删除链表节点
- mysql基础总结 语法篇
- 交换两个整型变量的两种方式
- lotou详解一:基本概念