CaesarParser is a framework written in Swift for you to parse Model from JSON or to JSON.
- JSON deserialization, parse JSON to Model
- JSON serialization, parse Model to JSON
- Support nested class, stand along, in arrays or in dictionaries
- Custom converter during parsing
- Support struct, primitive type, raw representable enum
Cocoa Touch Framework requires iOS 8 or later.
Manual add CaesarParser to your project requires iOS 7 or later.
###Carthage
Add the following line to your Cartfile.
github "lancy/CaesarParser"
Then do carthage update
. After that, add the framework to your project.
###Cocoapods
Add the following line in your Podfile
.
pod "CaesarParser", :git => 'https://github.com/lancy/CaesarParser.git'
Any type that confirm JSONDeserializable
or JSONConvertible
protocol can be parse. Besides you can use custom value converter during parsing.
/// Use for Class, Nested Type
public protocol JSONDeserializable {
init(json: JSONDictionary)
}
/// Use for Primitive Type
public protocol JSONConvertible {
static func convert(json: JSONObject) -> Self?
}
Any type that confirm JSONSerializable
can be parse to JSON.
/// convert to JSON object
public protocol JSONSerializable {
func toJSONObject() -> JSONObject
}
Build-in Support
- Int
- String
- Double
- Float
- Bool
- NSURL
- NSDate (unix_timestamp to NSDate, can be custom by build-in DateFormatConverter)
- NSURL (string to URL)
- Raw representable enums which raw value confirm to
JSONConvertible
- Array<JSONConvertible or JSONDeserializable>
- Dictionary<JSONConvertible and Hashable, JSONConvertible or JSONDeserializable>
Demo Code
enum Gender: Int {
case Unknown = 0
case Male = 1
case Female = 2
}
class Person: JSONDeserializable, JSONSerializable {
var name: String?
var age: Int?
var birthday: Double?
var weight: Float?
var adult: Bool = false
var gender: Gender = .Unknown
var girlFriend: Person?
var friends = [Person]()
var luckyNumbers = [Int]()
var favouredSingers = [String: Person]()
var vips = [Int: Person]()
var preferNumbers = [Int: Int]()
var orientation = [Gender]()
init(json: JSONDictionary) {
name <-- json["name"]
age <-- json["age"]
birthday <-- json["birthday"]
weight <-- json["weight"]
adult <-- json["adult"]
gender <-- json["gender"]
girlFriend <-- json["girlFriend"]
friends <-- json["friends"]
luckyNumbers <-- json["luckyNumbers"]
favouredSingers <-- json["favouredSingers"]
vips <-- json["vips"]
preferNumbers <-- json["preferNumbers"]
orientation <-- json["orientation"]
}
func toJSONObject() -> JSONObject {
var json = JSONDictionary()
name --> json["name"]
age --> json["age"]
birthday --> json["birthday"]
weight --> json["weight"]
adult --> json["adult"]
gender --> json["gender"]
girlFriend --> json["girlFriend"]
friends --> json["friends"]
luckyNumbers --> json["luckyNumbers"]
favouredSingers --> json["favouredSingers"]
vips --> json["vips"]
preferNumbers --> json["preferNumbers"]
orientation --> json["orientation"]
return json
}
}
- JSONHelper CaesarParser is inspired by JSONHelper a lot, thanks for their great work.
CaesarParser is available under the MIT license.