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
, andBool
types 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
Decodable
protocol. - 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.git
Add the following line to your Podfile
:
pod 'FlexiJSONCodable', '~> 0.0.6'
Then run:
pod install
or
pod update
Usage 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.