Alexander alternatives and similar libraries
Based on the "JSON" category.
Alternatively, view Alexander alternatives based on common mentions on social networks and blogs.
-
AlamofireObjectMapper
An Alamofire extension which converts JSON response data into swift objects using ObjectMapper -
Gloss
DISCONTINUED. [Deprecated] A shiny JSON parsing library in Swift :sparkles: Loved by many from 2015-2021 -
EVReflection
Reflection based (Dictionary, CKRecord, NSManagedObject, Realm, JSON and XML) object mapping with extensions for Alamofire and Moya with RxSwift or ReactiveSwift -
JSONHelper
โ Convert anything into anything in one operation; JSON data into class instances, hex strings into UIColor/NSColor, y/n strings to booleans, arrays and dictionaries of these; anything you can make sense of! -
CodableAlamofire
DISCONTINUED. An extension for Alamofire that converts JSON data into Decodable objects. -
Genome
A simple, type safe, failure driven mapping library for serializing JSON to models in Swift 3.0 (Supports Linux) -
Elevate
Elevate is a JSON parsing framework that leverages Swift to make parsing simple, reliable and composable. -
JSONNeverDie
Auto reflection tool from JSON to Model, user friendly JSON encoder / decoder, aims to never die -
AlamofireJsonToObjects
An Alamofire extension which converts JSON response data into swift objects using EVReflection
WorkOS - The modern identity platform for B2B SaaS
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Alexander or a related project?
README
Alexander
Alexander is an extremely simple JSON helper written in Swift. It brings type safety and Foundation helpers to the cumbersome task of JSON unpacking.
Requirements
Xcode | Swift | iOS | tvOS | OS X |
---|---|---|---|---|
10.2 | 5.0 | 8.0 | 9.0 | 10.9 |
Installation
Carthage
github "hodinkee/alexander"
CocoaPods
pod 'Alexander'
Usage
DecoderType
Make a new DecoderType
that can unpack your object.
struct User {
var ID: String
var name: String
var email: String
}
struct UserDecoder: DecoderType {
typealias Value = User
static func decode(JSON: Alexander.JSON) -> Value? {
guard
let ID = JSON["id"]?.stringValue,
let name = JSON["name"]?.stringValue,
let email = JSON["email"]?.stringValue
else {
return nil
}
return User(ID: ID, name: name, email: email)
}
}
Now you can do let author = JSON["user"]?.decode(UserDecoder)
to get a single user, or let users = JSON["users"]?.decodeArray(UserDecoder)
to get an array of users.
You can make DecodableType
s for all kinds of things.
struct SizeDecoder {
typealias Value = CGSize
static func decode(JSON: Alexander.JSON) -> Value? {
guard
let width = JSON["width"]?.doubleValue,
let height = JSON["height"]?.doubleValue
else {
return nil
}
return CGSize(width: width, height: height)
}
}
Alexander ships with a handful of decoders for common types:
DateTimeIntervalSince1970Decoder
DateTimeIntervalSinceReferenceDateDecoder
URLDecoder
RawRepresentableDecoder
Nested Objects
Most of Alexander's power comes from its two subscript operators: subscript[key: String] -> JSON?
and subscript[index: Int] -> JSON?
. These operators allow you to unpack nested objects without having to refer to each intermediate step by hand. Something like let nextCursor = JSON["meta"]?["pagination"]?["next_cursor"]?.stringValue
is a single line of code.
Enums & RawRepresentable
You can also decode anything that conforms to the RawRepresentable
type. For example, assume the following enum:
enum Planet: String {
case Mercury = "mercury"
case Venus = "venus"
case Earth = "earth"
case Mars = "mars"
case Jupiter = "jupiter"
case Saturn = "saturn"
case Uranus = "uranus"
case Neptune = "neptune"
// case Pluto = "pluto" =(
}
Because Planet
is backed by a String
raw value type, it is inheriently RawRepresentable
. This means you can do let planet = JSON["planet"]?.decode(RawRepresentableDecoder<Planet>)
or let planets = JSON["planets"]?.decodeArray(RawRepresentableDecoder<Planet>)
.