【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    }

不想要相应的扩展也可以研究下代码把生成步骤注释掉即可,编译项目
最后如图所示
这里写图片描述

怎么样,是不是很方便呢

0 0
原创粉丝点击