JSONtoCodable is a generating tool from Raw JSON to Codable (Swift4) text written in Swift4.
Qiita: JSONからCodable化されたstructを自動生成するツールを作った話 - Qiita
From JSON,
{
"user": {
"Name": "Yuto Mizutani"
},
"lib": {
"lib-name": "JSONtoCodable",
"year": 2018,
"version": "1.0.2",
"released": "2018-09-22"
},
"text": "Hello, world!!"
}
to Codable.
public struct Result: Codable {
public let user: User
public let lib: Lib
public let text: String
public struct User: Codable {
public let name: String
private enum CodingKeys: String, CodingKey {
case name = "Name"
}
}
public struct Lib: Codable {
public let libName: String
public let year: Int
public let version: String
public let released: String
private enum CodingKeys: String, CodingKey {
case libName = "lib-name"
case year
case version
case released
}
}
}
- Type
- String
- Bool
- Int
- Double
- struct(s)
- Optional
- Array
- Start array
- Muptiple array
- Arrayed objects
- Optional array
- Number of nested array and objects
- Infinity
- Number of spaces in entered JSON
- 0 to infinity
JSON Value | Swift Type |
---|---|
"text" | String |
true | Bool |
-10 | Int |
1.0 | Double |
null | <Foo>? |
(the others) | Any |
import JSONtoCodable
let json: String = """
{
"Hello": "Hello, world!!"
}
"""
let jsonToCodable = JSONtoCodable()
let codable = try? jsonToCodable.generate(json)
print(codable)
/*
struct Result: Codable {
let hello: String
private enum CodingKeys: String, CodingKey {
case hello = "Hello"
}
}
*/
let config = Config()
config.name = "Result" // struct Result: Codable {}
config.accessModifier = AccessModifier.public // public struct
config.caseType = (variable: CaseType.camel, struct: CaseType.pascal)
config.lineType = LineType.lineFeed
config.indentType = IndentType.space(4)
Add this to your Podfile:
pod 'JSONtoCodable'
and
$ pod install
Add this to your Cartfile:
github "YutoMizutani/JSONtoCodable"
and
$ carthage update
JSONtoCodable is available under the MIT license.