文章目录
  1. 1. 简介
  2. 2. 为什么要写D3Json
  3. 3. 什么是D3Json
  4. 4. D3Json的使用方法
  5. 5. 存在问题:
  6. 6. D3Json设计详细解释:
    1. 6.1. 更多可参考github上面的代码
  7. 7. D3Json下载地址:

简介

D3Json是一个把json转化为自定义对象类的swift工具。
github地址:https://github.com/mozhenhau/D3Json

为什么要写D3Json

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
我是从Android转过来的开发同志,自从来了swift后,json解释各种不习惯,连个json转对象的好用的方法都没有,很不习惯有木有!!!可能我个人比较Low,还没熟悉ios开发,字典用得不习惯有木有!!
所以大概仿照Gson的作用写了一个json解释方法,由于swift的反射机制貌似不是太完善,所以暂时只能这样先用着,坐等swift越来越强大。

什么是D3Json

通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般json转换类不能转换自定义对象的问题 只有一个文件:D3Json.swfit 扩展写在addExtension。可以参照扩展
例子在D3Json的Project里面,写了两个测试,一个是json转单model,一个是转model的list 在playgroud里面也有两个例子,但是playgroud里面,alloc自己定义的model时直接出错,可能是playgroud的bug

D3Json的使用方法

只需要一句代码:
var user:User = D3Json.jsonToModel(json, clazz: User.self)
就可以把json数据转换成User类

转成list对象:
var users = D3Json.jsonToModelList(jsonArr, clazz: User.self) as! Array\
就可以把json数据转换成Array\

存在问题:

  1. model属性基础类型需要初始化,自定义类型要用Optional类型
  2. 因为swift的反射reflect的缺陷,父类的属性暂不转换

D3Json设计详细解释:

有一个User类:
@objc(User)
class User:NSObject{
var name = “”
}
有一个json:
var json = [
"name": "ok",
"age":1,
"job": [
"name":"swift"
]
]

思路:

  1. 使用swift的reflect反射特性,获取User类的成员变量名称name和对应的成员变量类型type,必须使用@objc(xx)不然找不到类。
  2. ios有自己的特性,喜欢把很多东西放到字典处理,json也不例外,可以通过__json.objectForKey()__ 获取json里某个数据。
  3. ios可以通过__model.setValue(value,forKey:key)__赋值。
  4. 反射获取成员变量name1,当__json.objectForKey(name1)不为空时(此时证明json里的数据对应model对象的成员变量),调用__model.setValue(value,forKey:key)进行赋值,为空时跳过。
  5. 循环2-4步骤,直至所有成员变量赋值完成。
  6. 当通过反射对应的成员变量类型type,检查到如果是自定以对象的话,迭代一次步骤1-5.。

更多可参考github上面的代码

D3Json下载地址:

D3Json下载地址

文章目录
  1. 1. 简介
  2. 2. 为什么要写D3Json
  3. 3. 什么是D3Json
  4. 4. D3Json的使用方法
  5. 5. 存在问题:
  6. 6. D3Json设计详细解释:
    1. 6.1. 更多可参考github上面的代码
  7. 7. D3Json下载地址: