All Projects → SiriDx → JSONMatching

SiriDx / JSONMatching

Licence: MIT license
An easy way to decode JSON data into Model object in pure Swift

Programming Languages

swift
15916 projects
objective c
16641 projects - #2 most used programming language
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to JSONMatching

PreciseDecimal
A Decimal type that plays nicely with literals and Decodable ✨
Stars: ✭ 18 (+38.46%)
Mutual labels:  jsondecoder

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) {
    //...
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].