Skip to main content

JSON to Swift Model

Paste JSON and get Swift Codable structs with CodingKeys. struct or class, let or var, optional fields handled. Private.

Paste JSON on the left. Add a second sample to find optional fields.

JSON input

Stays in your browser

Swift code

The generated code appears here.

Shortcuts: Ctrl+Enter run · Ctrl+Shift+C copy result · / search (use ⌘ on Mac)

Next steps

Free Online JSON to Swift Model Generator

Generate Swift Codable models from a JSON sample, including the CodingKeys enum. It gives developers a quick browser-based way to solve a focused json to swift model task before moving the result into a project.

How to generate Swift code from JSON

Paste a JSON object or an array of objects into the input box and press Generate. Each type conforms to Codable and lists its CodingKeys. Keys that differ from the Swift name get an explicit raw value. Optional and nullable fields become Swift optionals.

One input, every language

Your JSON stays in the box when you switch the language tabs, and the code is generated again at once. Each language also has its own page, so you can bookmark the one you use.

How types are worked out

  • Whole numbers and numbers with decimals are told apart.
  • Add more samples with Add sample: a key missing from some samples becomes optional, and null makes a type nullable.
  • Arrays of objects are merged into one type, and nested objects become their own types named after the key.
  • Keys that are not valid names in the language (such as first-name or 2fa) are renamed and mapped back, never rejected.

Worked example

The sample JSON in the box above, generated with the default options:

{
  "id": 1,
  "name": "Ada",
  "email": null,
  "tags": ["x"],
  "address": { "city": "Pune", "pin": "411001" },
  "createdAt": "2026-01-15T10:30:00Z"
}
import Foundation

struct Root: Codable {
    let id: Int
    let name: String
    let email: String?
    let tags: [String]
    let address: Address
    let createdAt: String

    enum CodingKeys: String, CodingKey {
        case id
        case name
        case email
        case tags
        case address
        case createdAt
    }
}

struct Address: Codable {
    let city: String
    let pin: String

    enum CodingKeys: String, CodingKey {
        case city
        case pin
    }
}

Common mistakes

  • A single sample cannot show which fields are optional. Paste two or three different responses for a realistic result.
  • A value that is always null gives no type information, so it is treated as a nullable string. Change it by hand if it is something else.
  • Numbers are typed from the samples: 1 and 1.0 look the same in JSON, so use a sample with decimals where you need a float.

Frequently asked questions

Struct or class?
Structs are the usual choice for data models in Swift. Pick class if you need reference semantics.
How are dates handled?
With Detect dates on, date-time strings become Date. Set decoder.dateDecodingStrategy = .iso8601 when decoding.
What is JSONValue?
A field whose type could not be inferred (for example mixed types) is typed JSONValue, a small enum you add yourself, because Swift has no built-in "any JSON" Codable type.
Is my JSON uploaded?
No. The types are worked out in your browser. Nothing you paste is sent to a server.
How do I use this json to swift model tool?
Use the interactive controls above; processing stays in your browser and the result is intended as a practical starting point for development work.

More Formatters & Parsers

View all Formatters & Parsers tools →