FlexiJSONCoder 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.
- Default Value Handling: Automatically applies default values for any missing keys or values in the JSON.
- Type Coercion: Converts incoming data types (e.g., String, Int, Float, Double, Bool) to the model's expected type seamlessly.
- Null Value Management: Replaces null values with predefined default values, ensuring smooth processing.
- Data Integrity: Generates clear and actionable errors for unsupported type conversions while maintaining data consistency.
- Easy Integration: Compatible with your existing Swift codebase and leverages the Decodable protocol.
- Customizable: Supports extensions for additional data types, such as Date, URL, and more, for future-proof development
Version 0.0.1: This release with support for String
, Int
, Float
, Double
, and Bool
coercion.
FlexiJSONCoder is available through Swift Package Manager
- In Xcode select:
File > Swift Packages > Add Package Dependency...
- Then paste this URL:
https://github.com/Forgwhiz/FlexiJSONCoder.git
Add the following line to your Podfile
:
pod 'FlexiJSONCoder', '~> 0.0.1'
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 FlexiJSONCoder in your Swift model:
import FlexiJSONCoder
struct WelcomeModel: Codable {
let id: String?
let title: String
let type: Int?
let category: Float?
}
let jsonData = """
{
"id": "123",
"title": "Welcome",
"category": "45.67",
"isActive": "true",
}
""".data(using: .utf8)!
do {
let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: [.fragmentsAllowed])
let decodedModel = try FlexiJSONCoder().decode(WelcomeModel.self, from: jsonData)
print(decodedModel) // Outputs: WelcomeModel(id: "123", title: "Welcome", type: 0, 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. FlexiJSONCoder 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.)
FlexiJSONCoder is available under the MIT license. See the LICENSE file for more information.