FlexiJSONCodable is a lightweight, flexible, and easy-to-use library for decoding JSON data into Swift types, providing type coercion with fallback support. It allows you to seamlessly handle different data types coming from a JSON response and automatically convert them to the expected types in your model.
This library is especially useful when dealing with API responses that may contain multiple types for a single field (e.g., String, Int, Float, Double, etc.), making it easier to work with inconsistent data structures.
Important
The current version is still in development. There may be breaking changes in version updates until version 1.0.
- Type Coercion with Fallback: Automatically convert
String,Int,Float,Double, andBooltypes to your model's expected type. - Flexible Data Handling: Coerce data from different types (e.g.,
"true"string toBool,"1"string toInt, etc.). - Error Handling: Throws clear errors if the type conversion fails, ensuring data integrity.
- Easy Integration: Seamless integration with your existing Swift codebase using the standard
Decodableprotocol. - Customizable for Future Types: Easily extendable to support other types like
Date,URL, etc.
Version 0.0.6: This release with support for String, Int, Float, Double, and Bool coercion.
FlexiJSONCodable is available through Swift Package Manager
- In Xcode select:
File > Swift Packages > Add Package Dependency...- Then paste this URL:
https://github.com/Forgwhiz/FlexiJSONCodable.gitAdd the following line to your Podfile:
pod 'FlexiJSONCodable', '~> 0.0.6'Then run:
pod installor
pod updateUsage of the library is simple and can be seen in the example provided below. Here's how to use FlexiJSONCodable in your Swift model:
struct WelcomeModel: FlexiJSONCodable {
let id: String?
let title: String
let type: Int?
let category: Float?
let isActive: Bool?
}
let jsonData = """
{
"id": "123",
"title": "Welcome",
"type": "1",
"category": "45.67",
"isActive": "true",
}
""".data(using: .utf8)!
do {
let decodedModel = try JSONDecoder().decode(WelcomeModel.self, from: jsonData)
print(decodedModel) // Outputs: WelcomeModel(id: "123", title: "Welcome", type: 1, category: 45.67, isActive: true)
} catch {
print("Decoding failed: \(error)")
}While the basic functionality works out of the box for String, Int, Float, Double, and Bool, you can extend the functionality in the future as needed. FlexiJSONCodable is built with extensibility in mind.
| Command | Description |
|---|---|
String |
Can be converted from String, Int, Float, Double |
Int |
Can be converted from String, Float, Double |
Float |
Can be converted from String, Int, Double |
Double |
Can be converted from String, Int, Float |
Bool |
Can be converted from String ("true"/"false") or Int (1 for true, 0 for false) |
You can extend the library to support additional types (like Date, URL, etc.) by adding new decodeWithFallback functions for each type.
FlexiJSONCodable is available under the MIT license. See the LICENSE file for more information.