JSONMatching
An easy way to decode JSON data into Model object in pure Swift
Install / Use
/learn @SiriDx/JSONMatchingREADME
JSONMatching
An easy way to decode JSON data into Model object in pure Swift
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:
- for Projects, just drag JSONMatching.swift to the project tree
- 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) {
//...
}
Related Skills
node-connect
347.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
