Latest 1.0.2
Homepage https://github.com/SiriDx/JSONMatching
License MIT
Platforms ios 8.0, requires ARC
Authors

CocoaPods
Platform
Swift

An easy way to decode JSON data into Model object in pure Swift

  1. Requirements
  2. Integration
  3. Usage

Requirements

  • iOS 9.0+
  • Xcode 8

Integration

CocoaPods (iOS 8+)

You can use CocoaPods to install JSONMatching by adding it to your Podfile:

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
pod 'JSONMatching', '~> 1.0.0'
end

Manually (iOS 7+)

To use this library in your project manually you may:

  1. for Projects, just drag JSONMatching.swift to the project tree
  2. for Workspaces, include the whole JSONMatching.xcodeproj

Usage

Basics

To support deserialization from JSON, a class need to inherited from ‘CodableObject’.

import JSONMatching
class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0
}

let dic:[String:Any] = [
    "name":"jack",
    "age":18,
    "height":1.88,
    "male":true
]

let match = JSONMatching()
if let user = match.object(type: User.self, with: dic) {
    //...
}

JSONString

let jsonStr = """
    {
    "name": "aaa",
    "age": 18,
    "height": 166
    }
    """

let match = JSONMatching()
if let user = match.object(type: User.self, with: jsonStr) {
    //...
}   

Object Array

class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0
}

let userArray:[[String:Any]] = [
    ["name":"jack", "age":18, "height":1.88, "male":true],
    ["name":"lily", "age":18, "height":1.65, "male":false],
    ["name":"josh", "age":30, "height":1.77, "male":true]
]

let match = JSONMatching()
if let userArr = match.objectArray(type: [User].self, with: userArray) {
    //...
}

Object Property

Object properties declared in class should be initialise. if not, use ‘codableObjectForProperty’ to provide a relative object


class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0
    var pet:Pet = Pet()

    class Pet: CodableObject {
        var type:String = ""
        var name:String = ""
        var age:Int = 0
    }
}

let dic:[String:Any] = [
    "name":"jack",
    "age":18,
    "height":1.88,
    "male":true,
    "pet": [
        "name":"micky",
        "type":"cat",
    ]
]

/*
// if property 'pet' is optional, provide a relative object
match.codableObjectForProperty { (type) -> CodableObject? in
    if type == Pet?.self {
        return Pet()
    }
    return nil
}
*/

if let user = match.object(type: User.self, with: dic) {
    //...
}

Object Array Property

Use ‘codableObjectForProperty’ to provide a relative object for object array properties declared in class


class User: CodableObject {
    var name:String = ""
    var age:Int = 0
    var height:Double = 0

    var cars:[Car] = [Car]()
    class Car: CodableObject {
        var brand:String = ""
        var color:String = ""
        var price:Double = 0
    }

    var children:[Child]?
    class Child: CodableObject {
        var name:String = ""
        var age:Int = 0
        var male:Bool?
    }
}

let match = JSONMatching()
match.codableObjectForProperty { (type) -> CodableObject? in
    if type == [Car].self {
        return Car()
    } else if type == [Child]?.self  {
        return Child()
    }
    return nil
}

if let user = match.object(type: User.self, with: dic) {
    //...
}

Latest podspec

{
    "name": "JSONMatching",
    "version": "1.0.2",
    "summary": "JSONMatching provide an easy way to decode JSON data into Model object in Swift",
    "homepage": "https://github.com/SiriDx/JSONMatching",
    "license": {
        "type": "MIT"
    },
    "authors": {
        "DeanChen": "[email protected]"
    },
    "requires_arc": true,
    "platforms": {
        "ios": "8.0"
    },
    "source": {
        "git": "https://github.com/SiriDx/JSONMatching.git",
        "tag": "1.0.2"
    },
    "source_files": "Source/*.swift"
}

Pin It on Pinterest

Share This