https://github.com/forgwhiz/flexijsoncoder
FlexiJSONCoder is a Swift library that simplifies decoding JSON data with type coercion and fallback support. It handles inconsistent data structures by automatically converting fields to the expected types
https://github.com/forgwhiz/flexijsoncoder
cocoapods datatypeconversion framework jsondecoder jsonencoder swift swift-package-manager
Last synced: about 2 months ago
JSON representation
FlexiJSONCoder is a Swift library that simplifies decoding JSON data with type coercion and fallback support. It handles inconsistent data structures by automatically converting fields to the expected types
- Host: GitHub
- URL: https://github.com/forgwhiz/flexijsoncoder
- Owner: Forgwhiz
- License: mit
- Created: 2024-12-10T12:40:18.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-11T07:02:54.000Z (over 1 year ago)
- Last Synced: 2025-12-25T16:28:16.429Z (3 months ago)
- Topics: cocoapods, datatypeconversion, framework, jsondecoder, jsonencoder, swift, swift-package-manager
- Language: Swift
- Homepage:
- Size: 47.9 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README







# FlexiJSONCoder for Swift
**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.
## Features:
- **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
## Supported Datatypes :
**Version 0.0.1**: This release with support for `String`, `Int`, `Float`, `Double`, and `Bool` coercion.
## Example
[Download the example project](https://github.com/Forgwhiz/DecoderExample)
## Installation
FlexiJSONCoder is available through [Swift Package Manager](https://swiftpackageindex.com/Forgwhiz/FlexiJSONCoder)
### Swift Package Manager
- In Xcode select:
```ruby
File > Swift Packages > Add Package Dependency...
```
- Then paste this URL:
```ruby
https://github.com/Forgwhiz/FlexiJSONCoder.git
```
### Cocoapods
Add the following line to your `Podfile`:
```ruby
pod 'FlexiJSONCoder', '~> 0.0.1'
```
Then run:
```bash
pod install
```
or
```bash
pod update
```
## Demo
### Basic Usage
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:
```swift
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)")
}
```
### Options for Custom Types
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.
### Supported Types
| 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`) |
### Customizing for Future Types
You can extend the library to support additional types (like `Date`, `URL`, etc.)
## License
**FlexiJSONCoder** is available under the MIT license. See the [LICENSE](LICENSE) file for more information.
---