Code Quality Rank: L5
Programming language: Swift
License: MIT License
Tags: Data Management     JSON    
Latest version: v3.2.1

Gloss alternatives and similar libraries

Based on the "JSON" category.
Alternatively, view Gloss alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Gloss or a related project?

Add another 'JSON' Library



: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

Swift version CocoaPods Carthage compatible SPM CocoaPods Build Status

See the [former README.md](README_ARCHIVE.md) on instructions for using Gloss pre-Codable migration.


Gloss was created by Harlan Kellaway

Thank you to all contributors and the Swift community for 5 years of Gloss! :sparkling_heart:

License 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.



Use version 3.2.0 or higher to take advantage of migration helpers.


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


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)


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])


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:


*Note that all licence references and agreements mentioned in the Gloss README section above are relevant to that project's source code only.