Gloss alternatives and similar libraries
Based on the "JSON" category.
Alternatively, view Gloss alternatives based on common mentions on social networks and blogs.
-
JSONModel
Magical Data Modeling Framework for JSON - allows rapid creation of smart data models. You can use it in your iOS, macOS, watchOS and tvOS apps. -
JSONExport
JSONExport is a desktop application for Mac OS X which enables you to export JSON objects as model classes with their associated constructors, utility methods, setters and getters in your favorite language. -
JSON-Framework
This framework implements a strict JSON parser and generator in Objective-C. -
SwiftyJSONAccelerator
macOS app to generate Swift 5 code for models from JSON (with Codeable) -
Decodable
[Probably deprecated] Swift 2/3 JSON unmarshalling done (more) right -
TouchJSON
A humane JSON Objective-C un-framework. (TouchJSON has been deprecated - see README) -
Genome
A simple, type safe, failure driven mapping library for serializing JSON to models in Swift 3.0 (Supports Linux) -
CodableAlamofire
An extension for Alamofire that converts JSON data into Decodable objects. -
FastEasyMapping
A tool for fast serializing & deserializing of JSON -
Elevate
Elevate is a JSON parsing framework that leverages Swift to make parsing simple, reliable and composable. -
Coolie
Coolie(่ฆๅ) helps you to create models (& their constructors) from a JSON file. -
OCMapper
Objective-C library to easily map NSDictionary to model objects, works perfectly with Alamofire. ObjectMapper works similar to GSON -
AlamofireJsonToObjects
An Alamofire extension which converts JSON response data into swift objects using EVReflection -
Jay
Pure-Swift JSON parser & formatter. Fully streamable input and output. Linux & OS X ready. Replacement for NSJSONSerialization. -
A JSON parser with concise API written in Swift
A JSON parser with concise API written in Swift.
Appwrite - The Open Source Firebase alternative introduces iOS support
* 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 Gloss or a related project?
Popular Comparisons
README
:rotating_light: Deprecation Notice :rotating_light:
Gloss has been deprecated in favor of Swift's Codable framework.
The existing Gloss source is not going away, however updates will only be made to support migration to Codable. Read the [MIGRATION GUIDE](GLOSS_CODABLE_MIGRATION_GUIDE.md) now to get started.
If you do not yet have any Gloss models in your project yet are considering it for JSON parsing, turn around now! Select Swift's Codable framework instead.
I understand, I'm Using Gloss Anyway
See the [former README.md](README_ARCHIVE.md) on instructions for using Gloss pre-Codable migration.
Credits
Gloss was created by Harlan Kellaway
Thank you to all contributors and the Swift community for 5 years of Gloss! :sparkling_heart:
License 
See the LICENSE file for more info.
Codable Migration Quick Reference
The following is a reference for what your Gloss models and call-sites should look like after preparing to migrate to Codable.
See the [MIGRATION GUIDE](GLOSS_CODABLE_MIGRATION_GUIDE.md) for more detail.
Version
Use version 3.2.0
or higher to take advantage of migration helpers.
Deserialization
Given a Gloss model that conforms to JSONDecodable
, add conformance to Decodable
. A model that looks like this:
import Gloss
struct MyModel: JSONDecodable {
let id: Int?
init?(json: JSON) {
self.id = "id" <~~ json
}
}
adds
extension MyModel: Decodable {
init(from decoder: Swift.Decoder) throws {
// Proper Decodable definition or throw GlossError.decodableMigrationUnimplemented
// Remove this method if Codable can synthesize decoding for you
}
}
Initializing a Model from JSON
Where initializing that model currently looks like:
let myModel = MyModel(json: someJSON)
it becomes:
let myModel: MyModel = .from(decodableJSON: someJSON)
Serialization
Given a Gloss model that conforms to JSONEncodable
, add conformance to Encodable
. A model that looks like this:
import Gloss
struct MyModel: JSONEncodable {
let id: Int?
func toJSON() -> JSON? {
return jsonify(["id" ~~> self.id])
}
}
adds
extension MyModel: Encodable {
func encode(to encoder: Swift.Encoder) throws {
// Proper Encodable defintion or throw GlossError.encodableMigrationUnimplemented
// Remove this method if Codable can synthesize encoding for you
}
}
Translating Model Objects to JSON
Where translating to JSON currently looks like this:
let json: JSON? = myModel.toJSON()
it becomes:
let json: JSON? = myModel.toEncodableJSON()
JSON Arrays
Similar usage applies to arrays of Decodable
and Encodable
models, with from(decodableJSONArray:)
and toEncodableJSONArray()
respectively.
Configuring JSONDecoder
and JSONEncoder
If your Codable definitions are sound but you're encountering Codable errors, make sure your JSONDecoder
or JSONEncoder
instances are configured properly and pass them at call-sites:
let mySharedJSONDecoder: JSONDecoder = ...
let myModel: MyModel = .from(decodableJSON: someJSON, jsonDecoder: mySharedJSONDecoder)
let mySharedJSONEncoder: JSONEncoder = ...
let json: JSON? = myModel.toEncodableJSON(jsonEncoder: mySharedJSONEncoder)
Using Data
Instead of JSON
to Create Models
In the places where you've come to rely on Gloss's JSON
type, you'll eventually need to pass Data
, as that is what Codable uses. To get a jump using decode(:)
, one option is use the same method Gloss uses to do Data
transformation:
import Gloss
let sharedGlossSerializer: GlossJSONSerializer = ...
let json: JSON = ...
if let data: Data? = sharedGlossSerializer.data(from: json, options: nil) {
let myModel: MyModel = try? myJSONDecoder.decode(MyModel.self, from : data)
...
}
Take the opportunity with this migration to pare your models down to the slim amount of code Codable needs to work its magic and detangle your networking code from the details of JSON serialization. Future you will be grateful! :crystal_ball:
:sparkles::sparkles::sparkles:EOF
:sparkles::sparkles::sparkles:
*Note that all licence references and agreements mentioned in the Gloss README section above
are relevant to that project's source code only.