EasyJSON 1.0.2

EasyJSON 1.0.2

测试已测试
语言语言 SwiftSwift
授权协议 MIT
发布最新发布2018年4月
SPM支持 SPM

Nicholas Mata 维护。



EasyJSON 1.0.2

  • Nicholas Mata

EasyJSON

CI Status Version License Platform

EasyJSON 是一个简单的 JSON 到对象映射器。

要求

  • iOS 9.0+
  • Xcode 8.0+
  • Swift 3.0+

安装

Cocoapods

EasyJSON 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod "EasyJSON"

Carthage

为了安装它,请简单地将以下行添加到您的Cartfile中:

github "MataDesigns/EasyJSON"

功能

  • 允许自定义从JSON到和从JSON映射
  • 映射是EasyModel子类的属性
  • 允许自定义解析特定属性的处理程序
  • 映射子对象
  • snake_case🐍和camelCase🐪支持

用法

重要!!!目前只支持类(如果使用结构体,则不起作用)

简介

建立模型

只需要创建一个其子类是EasyModel的类。

import EasyJSON

class Person: EasyModel {
    var id: Int!
    var firstName: String?
    var lastName: String?
}

填充模型

从JSON到模型。

  1. 创建一个空模型
  2. 调用fill(withJson:)
  3. 您的模型现在已填充了字典中的信息。

只要键与属性名称完全匹配。

如果您字典的键与属性名称不同,请转到键映射

import EasyJSON

// Person Model

let json = ["id": 1, "firstName": "Jane", "lastName": "Doe"]
let person = Person()
person.fill(withDict: json)

print(person.id)        // Prints 1
print(person.firstName) // Prints Jane
print(person.lastName)  // Prints Doe

模型转JSON

import EasyJSON

let json = person.toJson()
print(json) // Prints ["id": 1, "firstName": "Jane", "lastName": "Doe"]

高级

键映射

您可以通过实现KeyMap协议来创建自定义键映射。
目前我们提供了两个键映射。

属性映射

那么,当您的JSON与属性名称不同时怎么办呢?

import EasyJSON

class Person: EasyModel {
    override var _options_: EasyModelOptions {
    	var maps = [KeyMap]()
        maps.append(PropertyMap(modelKey: "id", jsonKey: "personId"))
        return EasyModelOptions(maps: maps)
    }
    
    var id: Int!
    var firstName: String?
    var lastName: String?
}

此时,您可以使用以下JSON来填充对象。

let json = ["personId": 1, "firstName": "Jane", "lastName": "Doe"]

let person = Person()
person.fill(withDict: json)

print(person.id)        // Prints 1
print(person.firstName) // Prints Jane
print(person.lastName)  // Prints Doe

隐藏属性映射

那么,当您有一个与JSON无关的属性时怎么办?

import EasyJSON

class Person: EasyModel {
    override var _options_: EasyModelOptions {
    	var maps = [KeyMap]()
        maps.append(HidePropertyMap(modelKey: "fullName"))
        return EasyModelOptions(maps: maps)
    }
    
    var id: Int!
    var firstName: String?
    var lastName: String?
    var fullName: String {
        var name = ""
        name = name + (firstName ?? "")
        name = name + (lastName != nil ? " " + lastName! : "")
        return name
    }
}

那么就可以隐藏或toJson该属性

let json = ["personId": 1, "firstName": "Jane", "lastName": "Doe"]

let person = Person()
person.fill(withDict: json)

print(person.id)        // Prints 1
print(person.firstName) // Prints Jane
print(person.lastName)  // Prints Doe
print(person.fullName)  // Prints Jane Doe

let jsonDict = person.toJson()
print(jsonDict["fullName"]) // Prints nothing fullName key doesn't exist.

转换器

您可以通过实现转换器协议来创建自定义转换器。
转换器可以应用于特定类型或特定键。
(键转换器键优先于类型转换器键)
目前我们提供了两个转换器。

日期转换器

字符串转日期

{
   "id": 1,
   "firstName": "Nicholas",
   "lastName": "Mata",
   "birthday": "02/18/1994",
   "createdOn": "2017-01-28T10:00:48",
   "updatedOn": "2017-01-28T10:00:48"
}

因此日期只是字符串,我们如何将其转换为日期类型,然后再将JSON中的字符串转换回日期类型呢?

import EasyJSON

class Person: EasyModel {
    override var _options_: EasyModelOptions {
    	var converters = [ConverterKey:Converter]()
	converters[.key("birthDate")] = DateConverter(format: "MM/dd/yy")
        converters[.type(Date.self)] = DateConverter(format: "yyyy-MM-dd'T'HH:mm:ss")
        return EasyModelOptions(converters: converters)
    }
    
    var id: Int!
    var firstName: String?
    var lastName: String?
    
    var birthday: Date?
    var createdOn: Date?
    var updatedOn: Date?
}

就是这样,然后你可以像使用任何其他日期类型一样使用它。

布尔转换器

字符串转布尔

{
   "id": 1,
   "firstName": "Nicholas",
   "lastName": "Mata",
   "isBestFriend" : "No"
}

那么,我们如何将一个字符串转换为布尔值呢?

import EasyJSON

class Person: EasyModel {
    override var _options_: EasyModelOptions {
    	var converters = [ConverterKey:Converter]()
	converters[.key("isBestFriend")] = BoolConverter(trueWhen: "Yes", whenFalse: "No", caseSensitive: false)
        return EasyModelOptions(converters: converters)
    }
    
    var id: Int!
    var firstName: String?
    var lastName: String?
    var isBestFriend: Bool = false
}

映射子对象

现在假设你有这样一些内容。

class Student: EasyModel {
    var id: Int!
    var firstName: String?
    var lastName: String?
}

class Classroom: EasyModel {
    var id: Int!
    var name: String?
    var students: [Student]?
}

你的JSON看起来像这样

{
	"id": 1,
	"name": "Computer Science",
	"students": [{
		"id": 1,
		"firstName": "Nicholas",
		"lastName": "Mata"
	}, 
	{
		"id":2,
		"firstName": "Jane",
		"lastName": "Doe"
	}]
}

它仅仅是这样工作的。

作者

尼古拉斯·马塔,[email protected]

授权协议

EasyJSON 在 MIT 授权协议下可用。更多信息请参阅 LICENSE 文件。