JASON is a fasterJSON deserializer written in Swift.
JASON is the best framework we found to manage JSON at Swapcard. This is by far the fastest and
the most convenient out there, it made our code clearer and improved the global performance
of the app when dealing with large amount of data.
Alamofire.request(.GET, peopleURL).responseJASON { response in
if let json = response.result.value {
let people = json.map(Person.init)
print("people: \(people)")
}
}
// With a int key:
let personKey = JSONKey<JSON>(0)
let personJSON = peopleJSON[personKey]
// With a string key:
let nameKey = JSONKey<String>("name")
let name = personJSON[nameKey]
// With a path:
let twitterURLKey = JSONKey<NSURL?>(path: 0, "twitter")
let twitterURL = peopleJSON[twitterURLKey]
You might find more convenient to extend JSONKeys as shown in the Example section.
JSON.dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
extension JSONKeys {
static let id = JSONKey<Int>("id")
static let createdAt = JSONKey<NSDate?>("created_at")
static let updatedAt = JSONKey<NSDate?>("updated_at")
static let title = JSONKey<String>("title")
static let normalImageURL = JSONKey<NSURL?>(path: "images", "normal")
static let hidpiImageURL = JSONKey<NSURL?>(path: "images", "hidpi")
static let user = JSONKey<JSON>("user")
static let name = JSONKey<String>("name")
}
Step 2: Create the Shot and User models
struct Shot {
let id: Int
let title: String
let normalImageURL: NSURL
var hidpiImageURL: NSURL?
let createdAt: NSDate
let updatedAt: NSDate
let user: User
init(_ json: JSON) {
id = json[.id]
title = json[.title]
normalImageURL = json[.normalImageURL]!
hidpiImageURL = json[.hidpiImageURL]
createdAt = json[.createdAt]!
updatedAt = json[.updatedAt]!
user = User(json[.user])
}
}
struct User {
let id: Int
let name: String
let createdAt: NSDate
let updatedAt: NSDate
init(_ json: JSON) {
id = json[.id]
name = json[.name]
createdAt = json[.createdAt]!
updatedAt = json[.updatedAt]!
}
}
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
JASON is a faster
JSON
deserializer written in Swift.Features • Usage • Example • References • Installation • License
Features
benchmarks
Extensions/
Usage
Initialization
If you’re using
Alamofire
, includeJASON+Alamofire.swift
in your project for even more awesomeness:If you’re using
Moya
, check outMoya-JASON
!Parsing
Use subscripts to parse the
JSON
object:Type casting
Cast
JSON
value to its appropriate type by using the computed propertyjson.<type>
:The non-optional variant
json.<type>Value
will return a default value if not present/convertible:You can also access the internal value as
AnyObject?
if you want to cast it yourself:See the References section for the full list of properties.
JSONKey
:Define and use your
JSONKey
as follow:You might find more convenient to extend
JSONKeys
as shown in the Example section.See the References section for the full list of
JSONKey
types.Third-party libraries:
Example
JSONKeys
to define yourJSONKey
Shot
andUser
modelsJASON+Alamofire.swift
extension to fetch the shotsReferences
string
String?
stringValue
String
""
int
Int?
intValue
Int
0
double
Double?
doubleValue
Double
0.0
float
Float?
floatValue
Float
0.0
nsNumber
NSNumber?
nsNumberValue
NSNumber
0
cgFloat
CGFloat?
cgFloatValue
CGFloat
0.0
bool
Bool?
boolValue
Bool
false
nsDate
NSDate?
nsURL
NSURL?
dictionary
[String: AnyObject]?
dictionaryValue
[String: AnyObject]
[:]
jsonDictionary
[String: JSON]?
jsonDictionaryValue
[String: JSON]
[:]
nsDictionary
NSDictionary?
nsDictionaryValue
NSDictionary
NSDictionary()
array
[AnyObject]?
arrayValue
[AnyObject]
[]
jsonArray
[JSON]?
jsonArrayValue
[JSON]
[]
nsArray
NSArray?
nsArrayValue
NSArray
NSArray()
Installation
Carthage
Carthage is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.
You can install Carthage with Homebrew using the following command:
To integrate
JASON
into your Xcode project using Carthage, specify it in yourCartfile
:CocoaPods
CocoaPods is a dependency manager for Cocoa projects.
You can install it with the following command:
To integrate
JASON
into your Xcode project using CocoaPods, specify it in yourPodfile
:License
Copyright (c) 2015-2019 Damien (http://delba.io)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.