Skip to content

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

License

Notifications You must be signed in to change notification settings

SiriDx/JSONMatching

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JSONMatching

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) {
    //...
}

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors