【Android眼中的IOS】IOS开发快速解析Json数据(仿Android解析流程)

2 篇文章 0 订阅
2 篇文章 0 订阅

引言(想直接看方法的可跳到后面)

在开发过程当中,几乎避免不了的就是与各种数据打交道,数据的结构载体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
    }

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

怎么样,是不是很方便呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值