• Stars
    star
    253
  • Rank 160,776 (Top 4 %)
  • Language
    Swift
  • License
    MIT License
  • Created almost 9 years ago
  • Updated about 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple JSON Model Parser written in Swift

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.