Skip to content

lancy/CaesarParser

Repository files navigation

CaesarParser

Build Status

CaesarParser is a framework written in Swift for you to parse Model from JSON or to JSON.

Features

  • 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

Requirements

Cocoa Touch Framework requires iOS 8 or later.

Manual add CaesarParser to your project requires iOS 7 or later.

Installation

###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'

Basic Usages

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

Acknowledgements

  • JSONHelper CaesarParser is inspired by JSONHelper a lot, thanks for their great work.

License

CaesarParser is available under the MIT license.