logo
GeekFormat

JSON ke Swift

Konverter online gratis JSON ke Swift. Konversi dengan satu klik respons API, file konfigurasi, atau JSON log menjadi deklarasi tipe struct/class Swift murni. Tanpa pendaftaran, tanpa unggah: pembuatan real-time di browser Anda. Sempurna untuk pemodelan cepat dalam proyek iOS, macOS, watchOS, dan tvOS.

Rekomendasi Terkait

Tentang JSON ke Swift: Mengubah data JSON menjadi tipe native ekosistem Apple

JSON ke Swift adalah proses mengonversi data dalam format JSON (objek atau array) secara otomatis menjadi deklarasi tipe struct/class Swift. JSON adalah standar de facto untuk REST API, file konfigurasi, dan log analitik, sedangkan Swift adalah bahasa pengembangan utama untuk aplikasi iOS, macOS, watchOS, dan tvOS, serta bahasa inti untuk framework sisi server seperti Vapor. Dalam pengembangan, seringkali perlu untuk menulis tipe Swift yang sesuai untuk JSON yang dikembalikan oleh API; menulisnya secara manual memakan waktu dan rentan terhadap kelalaian bidang opsional. Tujuan alat ini adalah mengotomatiskan proses ini.

Alat ini menggunakan quicktype-core untuk melakukan konversi secara lokal di browser. quicktype adalah generator struktur multibahasa; alat ini mengaktifkan opsi just-types dan no-comments untuk Swift, sehingga outputnya adalah deklarasi properti struct/class bersih tanpa anotasi serialisasi seperti Codable, Decodable, atau Encodable, dan tanpa pernyataan import atau komentar kepala. "Tipe murni" ini memungkinkan pengembang untuk menambahkan protokol secara bebas, menyesuaikan kontrol akses, atau mengubah konvensi penamaan sesuai preferensi framework jaringan seperti Alamofire / Moya.

Sistem tipe Swift dikenal karena keamanannya. struct adalah tipe nilai, cocok untuk mewakili data yang tidak dapat diubah; class adalah tipe referensi, cocok untuk skenario yang membutuhkan status bersama atau pewarisan. Properti yang dihasilkan oleh alat ini dipetakan seakurat mungkin ke String, Int, Double, Bool, [T], tipe kustom, dll. dari Swift. Setelah pembuatan, pengembang dapat mengubah bidang tertentu menjadi Optional (?) berdasarkan kebutuhan bisnis, menambahkan protokol Codable ke tipe, atau mempromosikan seluruh struct menjadi class untuk mendapatkan semantik referensi.

Penanganan objek bertingkat adalah kemampuan inti alat ini. Ketika JSON berisi objek bertingkat, alat secara rekursif menghasilkan subtipe independen; misalnya, ketika Root berisi objek address, tipe Address dihasilkan dan tipe utama mereferensikannya melalui var address: Address. Ini menghindari definisi tipe duplikat dan memungkinkan autocomplete serta pemeriksaan tipe Xcode melacak hubungan hierarkis dengan benar. Aturan penamaan adalah menaruh huruf pertama nama bidang dalam huruf kapital; misalnya, elemen dalam array users dinamai User.

Inferensi tipe array mengikuti strategi "simpulkan dari elemen pertama". Jika elemen array adalah string, [String] dihasilkan; jika bilangan bulat, [Int]; jika bilangan pecahan, [Double]; jika objek, [tipe kustom]. Array kosong [] tidak memiliki sampel, sehingga [Any] atau tipe fallback dihasilkan; setelah pembuatan, disarankan untuk mengubahnya ke tipe konkret berdasarkan bisnis nyata. Untuk array yang sangat besar atau jarang, disarankan untuk memasukkan elemen contoh nyata di sumber JSON untuk meningkatkan akurasi inferensi.

Pemrosesan murni di frontend adalah keunggulan arsitektural utama alat ini. Semua parsing JSON dan pembuatan kode Swift dijalankan dalam JavaScript browser (termasuk quicktype-core di Web Worker), independen dari layanan backend, dan tidak ada data yang dikirim ke server mana pun. Desain ini melindungi data JSON yang mungkin berisi informasi sensitif dan memastikan kecepatan konversi hanya dibatasi oleh kinerja perangkat lokal, tanpa menunggu perjalanan jaringan. Ini sangat penting saat memproses JSON yang berisi kunci API atau bidang bisnis yang tidak dipublikasikan.

Berbeda dengan beberapa alat online yang memaksa strategi dekode Codable / CodingKeys / Date, alat ini memegang prinsip output minimum: anggota tim seringkali memiliki preferensi berbeda tentang protokol, penamaan, dan kontrol akses, dan alat ini menyerahkan pilihan protokol dan strategi kepada pengembang untuk penyempurnaan per proyek. Alur kerja "hasilkan setengah jadi + pascapemrosesan tingkat proyek" ini umumnya lebih populer di kalangan insinyur di tim menengah dan besar daripada solusi "sekali klik semuanya".

Kasus penggunaan

  • Pengembangan iOS: konversi JSON yang dikembalikan oleh REST API backend menjadi struct Swift untuk pemodelan lapisan jaringan SwiftUI atau UIKit dan dekode JSONDecoder
  • Pengembangan macOS: konversi JSON konfigurasi aplikasi menjadi tipe Swift untuk pembacaan konfigurasi tipe-aman di proyek AppKit, menghindari kesalahan ketik
  • Pengembangan watchOS: konversi JSON data kesehatan dan kebugaran menjadi model Swift untuk aplikasi Apple Watch, berintegrasi dengan SwiftUI dan HealthKit
  • Pengembangan tvOS: konversi JSON API rekomendasi konten menjadi tipe Swift untuk tampilan data halaman awal aplikasi TV dan navigasi fokus
  • Pemodelan MVVM SwiftUI: hubungkan model data API langsung sebagai properti @Published ke ViewModel, mengendalikan tampilan antarmuka
  • Aliran data reaktif Combine: gunakan tipe respons JSON sebagai tipe output Publisher, bekerja dengan JSONDecoder untuk parsing reaktif
  • Pra-pemodelan SwiftData / Core Data: hasilkan struct Swift terlebih dahulu, lalu tambahkan anotasi @Model atau @NSManaged secara manual untuk pemetaan entitas
  • Integrasi SDK pihak ketiga: konversi contoh respons JSON dari dokumentasi SDK menjadi tipe Swift untuk integrasi cepat dengan SDK login, pembayaran, notifikasi push, peta, dll.
  • Persiapan pengujian unit: konversi JSON mock antarmuka menjadi tipe Swift untuk data pengujian XCTest dan asersi, meningkatkan kemudahan pemeliharaan pengujian
  • Tinjauan kode: konversi JSON respons API menjadi tipe Swift untuk memfasilitasi diskusi tim dalam Code Review tentang penamaan bidang dan opsionalitas
  • Pengembangan hibrida Flutter / React Native: siapkan model data untuk memanggil modul Swift native, mengurangi kesalahan konversi tipe di lapisan jembatan
  • Migrasi API backend: hasilkan model klien Swift dari dokumentasi REST API atau JSON contoh Postman, memungkinkan sinkronisasi cepat selama pembaruan versi
  • Pengajaran dan pelatihan: demonstrasikan pemetaan JSON-sistem tipe dalam kursus Swift/iOS untuk membantu siswa memahami pemodelan data API dan keamanan tipe
  • Aplikasi kesehatan dan kebugaran: konversi JSON yang dikembalikan oleh HealthKit/Fitbit dan API serupa menjadi tipe Swift untuk pemodelan data Apple Health
  • Aplikasi pembayaran dan keuangan: konversi JSON respons API gateway pembayaran menjadi model Swift untuk rekonsiliasi dan penanganan pengecualian
  • Sistem pesanan e-commerce: konversi JSON untuk pesanan, produk, alamat, dll. menjadi struct Swift untuk digunakan dengan daftar SwiftUI dan halaman detail
  • Aplikasi berita dan konten: konversi respons JSON dari sistem manajemen konten menjadi tipe Swift untuk TableView / daftar SwiftUI / halaman detail
  • Pengembangan server Vapor: konversi JSON permintaan/respons API backend menjadi struct Swift untuk definisi model sisi server dan pengkodean/pendekodean Codable
  • MapKit dan data geografis: konversi JSON yang dikembalikan oleh API peta menjadi struct Swift untuk pencarian lokasi, perencanaan rute, dan pemodelan hasil geokode

Cara Penggunaan

  1. Tempel konten JSON di editor sebelah kiri, atau klik tombol unggah untuk memilih file .json / .txt, atau muat data contoh bawaan
  2. Setelah debounce 400ms, alat secara otomatis memanggil quicktype-core untuk konversi; sisi kanan menampilkan kode struct / class Swift yang dihasilkan
  3. Jika JSON salah format, klik tombol "Perbaiki JSON" untuk memperbaiki masalah sintaks umum secara otomatis (koma di akhir, tanda kutip tunggal, tanda kutip yang hilang, dll.)
  4. Verifikasi hasil yang dihasilkan; Anda dapat menambahkan Codable / Equatable / Identifiable dan protokol lain secara manual sesuai kebutuhan proyek. Klik "Salin" untuk menempel ke Xcode, atau "Unduh" untuk menyimpan sebagai file .swift

Fitur

  • Konversi murni di browser: parsing JSON dan pembuatan kode Swift dilakukan melalui quicktype-core di browser; JSON mentah maupun kode yang dihasilkan tidak dikirim ke server mana pun
  • Mode quicktype-core just-types: output adalah deklarasi properti struct/class Swift bersih tanpa import, anotasi Codable/CodingKeys, atau komentar lain, siap disesuaikan untuk proyek Anda
  • Konversi otomatis dengan debounce 400ms: setelah menempel atau mengedit JSON, tipe Swift dihasilkan hampir seketika tanpa perlu mengklik tombol berulang kali; konversi sepenuhnya asinkron dan tidak pernah memblokir antarmuka
  • Eksekusi latar belakang dengan Web Worker: quicktype-core berjalan di Web Worker browser, mencegah thread utama macet dan editor menjadi lambat selama konversi JSON besar
  • Inferensi tipe cerdas: secara otomatis memetakan String, Int, Double, Bool, [T], dan tipe kustom; array disimpulkan dari tipe elemen pertama — tidak perlu menulis tipe bidang secara manual
  • Ekspansi otomatis objek bertingkat: secara rekursif menghasilkan tipe Swift independen untuk setiap objek bertingkat, dinamai dengan huruf pertama nama bidang dalam huruf kapital, menghindari definisi tipe duplikat
  • Inferensi tipe array otomatis: array JSON secara otomatis dikonversi menjadi [String] / [Int] / [Double] / [tipe kustom]; array kosong menghasilkan [Any] secara default
  • Perbaikan kesalahan JSON satu klik: ketika kesalahan format umum ditemukan — koma di akhir, tanda kutip tunggal, tanda kutip yang hilang, komentar, dll. — dapat diperbaiki secara otomatis dengan satu klik dan konversi berlanjut
  • Salin satu klik + unduh .swift: salin kode Swift yang dihasilkan ke papan klip atau unduh sebagai file .swift untuk diseret langsung ke proyek Xcode Anda
  • Data contoh + unggah file: JSON contoh bergaya Swift terintegrasi (dengan address / company / tags bertingkat); mendukung seret dan lepas atau klik untuk mengunggah file .json / .txt
  • Riwayat input localStorage: secara otomatis menyimpan input terbaru Anda; setelah menyegarkan atau menutup halaman secara tidak sengaja, Anda dapat melanjutkan pengeditan dengan cepat tanpa kehilangan konten
  • Editor layar terbagi responsif: tampilan langsung dalam tata letak terbagi kiri/kanan, disesuaikan untuk desktop dan seluler; operasi lancar bahkan di layar kecil

Contoh Kode

Swift: Parsing struct yang dihasilkan dengan URLSession + JSONDecoder

swift

Penggunaan paling umum di proyek iOS/macOS: tambahkan Codable ke struct yang dihasilkan oleh alat ini, lalu ambil secara asinkron dengan URLSession dan dekode dengan JSONDecoder.

import Foundation

// 1) Tipe root yang dihasilkan oleh alat ini (dengan protokol Codable ditambahkan)
struct User: Codable {
    let id: Int
    let name: String
    let email: String
    let isActive: Bool
    let tags: [String]
}

// 2) Pengambilan dan dekode asinkron URLSession
func fetchUser(id: Int) async throws -> User {
    let url = URL(string: "https://api.example.com/users/\(id)")!
    let (data, response) = try await URLSession.shared.data(from: url)
    guard
        let http = response as? HTTPURLResponse,
        (200..<300).contains(http.statusCode)
    else {
        throw URLError(.badServerResponse)
    }
    return try JSONDecoder().decode(User.self, from: data)
}

// 3) Contoh penggunaan (Swift 5.5+ async/await)
Task {
    do {
        let user = try await fetchUser(id: 42)
        print("User: \(user.name), tags: \(user.tags)")
    } catch {
        print("Failed to decode:", error)
    }
}

Swift: Deserialisasi tipe yang dihasilkan dengan Alamofire responseDecodable

swift

Saat menggunakan Alamofire, Anda dapat menggunakan responseDecodable langsung untuk mendekode otomatis struct yang dihasilkan oleh alat ini menjadi objek Swift.

import Foundation
import Alamofire

// Tipe yang dihasilkan oleh alat ini, dapat digunakan langsung setelah menambahkan Codable
struct Product: Codable {
    let id: Int
    let title: String
    let price: Double
    let inStock: Bool
    let images: [String]
}

final class ProductService {
    private let session: Session

    init(session: Session = .default) {
        self.session = session
    }

    /// responseDecodable gaya Alamofire 5 async/await
    func loadProduct(id: Int) async throws -> Product {
        let url = "https://api.example.com/products/\(id)"
        return try await withCheckedThrowingContinuation { continuation in
            session.request(url)
                .validate(statusCode: 200..<300)
                .responseDecodable(of: Product.self) { response in
                    switch response.result {
                    case .success(let product):
                        continuation.resume(returning: product)
                    case .failure(let error):
                        continuation.resume(throwing: error)
                    }
                }
        }
    }
}

// Contoh panggilan gaya Moya
// provider.request(.product(id: 1)).map(Product.self)
// let product: Product = try await provider.request(.product(id: 1)).map(Product.self)

Swift: Parsing reaktif dengan Combine + JSONDecoder

swift

Dalam proyek SwiftUI / Combine, Anda dapat menggunakan struct yang dihasilkan bersama dengan dataTaskPublisher / decode untuk aliran data reaktif.

import Foundation
import Combine

// Tipe root yang dihasilkan oleh alat ini
struct Article: Codable, Identifiable {
    let id: Int
    let title: String
    let body: String
    let publishedAt: Date
}

final class ArticleRepository {
    private let session: URLSession
    private var cancellables = Set<AnyCancellable>()

    init(session: URLSession = .shared) {
        self.session = session
    }

    /// Mengekspos aliran data dengan Combine
    func articlePublisher(id: Int) -> AnyPublisher<Article, Error> {
        let url = URL(string: "https://api.example.com/articles/\(id)")!
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .iso8601

        return session.dataTaskPublisher(for: url)
            .map(\.data)
            .decode(type: Article.self, decoder: decoder)
            .receive(on: DispatchQueue.main)
            .eraseToAnyPublisher()
    }

    /// Berlangganan di SwiftUI ViewModel
    func bind(to viewModel: ArticleViewModel, articleId: Int) {
        articlePublisher(id: articleId)
            .sink(
                receiveCompletion: { completion in
                    if case .failure(let err) = completion {
                        viewModel.errorMessage = err.localizedDescription
                    }
                },
                receiveValue: { article in
                    viewModel.article = article
                }
            )
            .store(in: &cancellables)
    }
}

final class ArticleViewModel: ObservableObject {
    @Published var article: Article?
    @Published var errorMessage: String?
}

Best Practices

Pertanyaan Umum

Bagaimana cara mengonversi JSON ke struct Swift?

Tempel konten JSON Anda di kotak input sebelah kiri. Setelah debounce 400ms, alat ini secara otomatis memanggil quicktype-core untuk mengonversinya menjadi kode Swift dan menampilkan hasilnya di panel kanan secara real-time. Anda juga dapat mengklik tombol unggah untuk memilih file .json / .txt, atau mengklik tombol contoh untuk memuat data bawaan. Setelah konversi selesai, Anda dapat menyalin hasilnya atau mengunduhnya sebagai file .swift dengan satu klik.

Apakah kode Swift yang dihasilkan menyertakan Codable?

Secara default tidak. Alat ini menggunakan mode just-types dari quicktype-core, yang menghasilkan deklarasi properti struct/class murni tanpa anotasi Codable, Decodable, atau Encodable, dan tanpa pernyataan import. Jika Anda membutuhkan Codable, cukup tambahkan : Codable setelah pembuatan (mis. struct User: Codable {}), atau tulis logika parsing Anda sendiri dengan JSONDecoder.

Struktur data JSON apa yang didukung?

Semua JSON valid didukung: tipe dasar (null, boolean, number, string), array satu dimensi atau multidimensi, dan objek bertingkat dengan kedalaman berapa pun. Input root dapat berupa objek JSON atau array JSON; alat ini memprioritaskan objek dan menyimpulkan array dari elemen pertamanya. Input yang tidak didukung mencakup nilai khusus JavaScript (fungsi, Symbol, undefined) dan teks non-JSON.

Bagaimana objek JSON bertingkat ditangani?

Alat ini secara rekursif menghasilkan tipe Swift independen untuk setiap objek bertingkat. Penamaan didasarkan pada kombinasi nama tipe induk dan nama bidang; misalnya, jika Root berisi bidang address, subtipe Address akan dihasilkan dan tipe utama mereferensikannya melalui var address: Address. Ini menghindari definisi tipe duplikat dan memungkinkan autocomplete serta pemeriksaan tipe Xcode melacak hubungan hierarkis dengan benar.

Apakah bidang array menjadi array Swift?

Ya. Array JSON secara otomatis dikonversi ke bentuk [T] Swift. Jika elemen array adalah string, [String] dihasilkan; jika bilangan bulat, [Int]; jika bilangan pecahan, [Double]; jika objek, [tipe kustom]. Array kosong [] tidak memiliki elemen contoh, sehingga [Any] dihasilkan secara default; setelah pembuatan, disarankan untuk mengubahnya secara manual ke tipe konkret seperti [String] atau [Int].

Tipe apa yang dihasilkan untuk bidang dengan nilai null?

Nilai null dalam JSON tidak dapat menyimpulkan tipe konkretnya; alat ini dapat menghasilkan Any atau tipe fallback. Disarankan untuk mengganti bidang dengan nilai null di sumber JSON dengan nilai contoh (mis. "field": "" menyimpulkan String) atau mengubahnya secara manual ke Optional berdasarkan logika bisnis (mis. var phone: String?), yang lebih sesuai dengan semantik keamanan sistem tipe Swift.

Dapatkah saya menyesuaikan nama struct yang dihasilkan?

Ya. Klik tombol nama tipe (atau input pengaturan) di bilah alat untuk mengubah nama tipe root (default adalah Root atau disimpulkan dari data contoh). Nama subtipe dibuat secara otomatis berdasarkan nama root dan nama bidang; aturan penamaan adalah menaruh huruf pertama nama bidang dalam huruf kapital, mis. users → User, tags → Tag.

Bagaimana jika JSON saya salah format?

Alat ini secara otomatis mendeteksi validitas JSON; jika ada kesalahan, pesan kesalahan spesifik ditampilkan di sebelah kanan dan tombol "Perbaiki JSON" disediakan. Dengan mengkliknya, kesalahan umum diperbaiki secara otomatis: koma di akhir, tanda kutip tunggal diganti dengan ganda, tanda kutip yang hilang pada kunci, penghapusan komentar, dll. Setelah perbaikan berhasil, Anda dapat melanjutkan konversi tanpa mengoreksi JSON secara manual.

Apakah data saya dikirim ke server? Apakah privat dan aman?

Berjalan sepenuhnya di browser Anda. Semua parsing JSON dan pembuatan kode Swift dilakukan secara lokal melalui JavaScript browser (termasuk quicktype-core di Web Worker); JSON yang Anda masukkan dan kode Swift yang dihasilkan tidak pernah dikirim ke server mana pun, tidak dicatat, atau di-cache di cloud. JSON sensitif yang berisi kunci API, token, bidang privasi pengguna, atau struktur bisnis yang tidak dipublikasikan dapat digunakan dengan aman — menutup halaman menghapus semuanya.

Dapatkah kode yang dihasilkan digunakan langsung di proyek Xcode?

Ya. Kode yang dihasilkan adalah sintaks Swift standar dan dapat disalin langsung ke file .swift Xcode, atau disimpan sebagai file .swift melalui tombol "Unduh" dan diseret ke proyek Anda. Karena outputnya adalah deklarasi tipe murni, disarankan untuk menambahkan protokol seperti Codable, Equatable, Identifiable secara manual sesuai kebutuhan, atau menyesuaikan pengubah kontrol akses (public / internal / private).

Apakah array JSON didukung sebagai input root?

Ya. Ketika input root adalah array JSON, alat ini menggunakan elemen pertama array sebagai templat untuk menghasilkan tipe elemen dan mengeluarkan definisi tipe elemen tersebut. Misalnya, [{"id":1,"name":"A"}] menghasilkan struct bernama Item (atau nama yang disimpulkan dari bidang) yang bidangnya adalah bidang elemen pertama; tipe utama mereferensikannya melalui properti items: [Item], menghindari memperlakukan array langsung sebagai tipe root.

Apakah mengonversi JSON besar akan menyebabkan kelambatan?

Tidak ada batasan ukuran eksplisit, tetapi browser akan menjadi lebih lambat saat mem-parsing dan merender JSON yang sangat besar. Rekomendasi: ① Konversi JSON hanya satu modul bisnis sekaligus; ② Bagi tingkat bersarang yang dalam dan proses secara terpisah; ③ Untuk JSON di atas beberapa MB, Anda dapat menggunakan versi baris perintah quicktype; ④ Membagi JSON yang sama menjadi beberapa submodul dan mengonversinya secara terpisah dapat mengurangi penggunaan memori secara signifikan.

Dapatkah JSON ke Swift dan JSON ke TypeScript digunakan secara bergantian?

Keduanya mengonversi JSON menjadi definisi tipe untuk bahasa masing-masing, tetapi fokusnya berbeda: JSON ke Swift menghasilkan deklarasi properti struct/class untuk aplikasi native iOS/macOS; JSON ke TypeScript menghasilkan deklarasi interface/type untuk pemeriksaan tipe frontend. Jika proyek Anda memiliki klien iOS dan frontend web, disarankan untuk menghasilkan versi Swift dan TS dari JSON yang sama untuk memastikan konsistensi tipe di kedua sisi.

Bagaimana cara menambahkan protokol Codable ke kode yang dihasilkan?

Alat ini menghasilkan tipe murni secara default tanpa protokol. Setelah pembuatan, Anda hanya perlu menambahkan : Codable setelah deklarasi struct/class, mis. struct User: Codable {}, dan JSONDecoder dapat menggunakannya. Jika Anda menginginkan Codable secara default, Anda dapat melakukan fork quicktype-core dan memodifikasi renderer Swift-nya, atau menggunakan penggantian massal Xcode untuk menambahkan protokol ke semua tipe setelah pembuatan.

Apakah memerlukan internet? Dapatkah digunakan di ponsel?

Kunjungan pertama memerlukan internet untuk memuat skrip alat dan sumber daya quicktype-core; setelah itu dapat bekerja secara offline dari cache browser (di browser yang sudah dikunjungi). Browser seluler (iOS Safari, Android Chrome) juga berfungsi normal; antarmuka menggunakan desain layar terbagi responsif yang secara otomatis beralih ke penumpukan vertikal dalam orientasi potret.

Setelah pembuatan, dapatkah saya memodifikasi tipe individual tanpa merusak yang lain?

Ya. Setelah pembuatan, setiap tipe Swift adalah struct/class yang independen; output alat adalah teks biasa. Anda dapat menyalin satu tipe secara individual dan menempelkannya ke Xcode, atau menggunakan refaktorisasi Rename Xcode untuk mengubah tipe dan bidang secara massal tanpa memengaruhi tipe lain. Jika Anda perlu membuat ulang seluruh grup tipe, cukup segarkan halaman dan tempel JSON lagi.

Apakah inferensi enum Swift didukung?

Dukungan quicktype untuk union/enum memerlukan petunjuk tipe tambahan atau input GraphQL/JSON Schema. Menyimpulkan enum hanya dari sampel JSON sulit, jadi alat ini tidak menghasilkan enum secara default. Jika Anda membutuhkan enum, Anda dapat mengubah struct yang sesuai secara manual menjadi enum + Codable, atau menggunakan alat JSON ke Kotlin/TypeScript terlebih dahulu untuk mendapatkan tipe enum dan kemudian memigrasikannya secara manual ke Swift.

Pemecahan Masalah

Menampilkan "Silakan masukkan data JSON" atau sisi kanan kosong

Kotak input di sebelah kiri kosong atau hanya berisi spasi. Tempel konten JSON yang valid, atau klik "Contoh" untuk memuat contoh, atau "Unggah" untuk memilih file .json / .txt.

Menampilkan "Unexpected token ... in JSON"

JSON salah format. Penyebab umum: ① koma di akhir (mis. {"a":1,}); ② tanda kutip tunggal digunakan alih-alih ganda; ③ sintaks objek JS (mis. {key: value}) alih-alih JSON (mis. {"key": "value"}); ④ berisi komentar JavaScript. Mengklik tombol "Perbaiki JSON" dapat memperbaiki beberapa kesalahan umum secara otomatis.

Tipe yang dihasilkan tidak memiliki Codable dan tidak dapat digunakan langsung dengan JSONDecoder

Ini adalah perilaku yang diharapkan. Alat ini menggunakan mode just-types dan menghasilkan deklarasi properti struct/class murni. Jika Anda membutuhkan Codable, tambahkan : Codable ke tipe setelah pembuatan (mis. struct User: Codable {}), atau tulis extension User: Codable {} sebelum memanggil JSONDecoder.

Array kosong [] menghasilkan [Any]

Array kosong tidak memiliki elemen contoh, sehingga alat menghasilkan tipe fallback [Any]. Disarankan untuk memasukkan setidaknya satu elemen contoh di sumber JSON (mis. [1, 2]), hapus nilai contoh setelah pembuatan, dan tentukan tipe konkret secara manual; atau ubah langsung ke tipe yang lebih akurat seperti [String] / [User] setelah pembuatan.

Tipe bidang dengan nilai null tidak pasti

JSON null tidak dapat menyimpulkan tipe konkret; alat dapat menghasilkan Any atau tipe fallback. Disarankan untuk mengganti null di sumber JSON dengan nilai contoh yang representatif (mis. "" atau 0), lalu ubah bidang tersebut menjadi Optional (?) atau tipe konkret setelah pembuatan, mis. var phone: String?.

Nama tipe yang dihasilkan tidak sesuai dengan konvensi proyek

Anda dapat mengubah nama tipe root di bilah alat; nama subtipe dibuat secara otomatis berdasarkan nama root + nama bidang. Jika masih tidak puas, gunakan refaktorisasi Rename Xcode untuk perubahan massal setelah pembuatan (klik kanan → Refactor → Rename); Xcode akan memperbarui semua referensi secara sinkron.

Halaman menjadi lambat setelah konversi JSON besar

Browser menjadi lebih lambat saat merender JSON yang sangat besar dan menghasilkan banyak tipe. Disarankan untuk membagi JSON menjadi beberapa modul bisnis independen dan mengonversinya secara terpisah, atau hanya mengekstrak objek kunci yang memerlukan pemodelan; untuk JSON di atas 10 MB, versi baris perintah quicktype direkomendasikan.

Kesalahan kompilasi Xcode: "Type 'X' does not conform to protocol 'Decodable'"

Berarti Anda telah menambahkan Codable ke beberapa bidang tetapi tidak menangani tipe Optional / Date / Enum dengan benar. Perbaikan umum: ① Ubah semua bidang yang dapat bernilai null menjadi Optional<T>; ② Sesuaikan strategi tanggal dengan JSONDecoder().dateDecodingStrategy = .iso8601; ③ Sesuaikan CodingKeys untuk menyelaraskan kunci JSON dengan nama properti Swift.

Nama bidang adalah snake_case tetapi konvensi Swift adalah camelCase

Alat ini mempertahankan nama bidang JSON asli secara default, sehingga bidang snake_case dihasilkan apa adanya. Jika ingin menyatukan ke camelCase, Anda dapat mengganti nama secara massal menggunakan Rename Xcode setelah pembuatan, atau mengonversi nama bidang ke camelCase di renderer quicktype yang disesuaikan, lalu tambahkan pemetaan CodingKeys untuk memastikan dekode JSON yang benar.

File .swift yang diunduh menunjukkan kesalahan dengan kunci bahasa Mandarin saat dibuka di Xcode

Swift merekomendasikan nama bidang bahasa Inggris ASCII sebagai pengidentifikasi. Jika sumber JSON berisi kunci bahasa Mandarin (mis. {"姓名": "Alice"}), var 姓名: String yang dihasilkan akan menyebabkan kesalahan kompiler Swift di beberapa versi lama. Disarankan untuk mengubah kunci ke bahasa Inggris (mis. name) di sumber JSON, yang lebih sesuai dengan standar pengkodean Swift.

Tipe hanya memiliki var, tanpa kontrol let / private

Alat ini menghasilkan properti var public secara default untuk memudahkan pascapemrosesan. Jika Anda menginginkan let atau kontrol akses (mis. private(set)), Anda dapat mengubah secara massal menggunakan Refactor Xcode → Add Access Control, atau mengganti var dengan let menggunakan sed / alat pengeditan teks setelah pembuatan.

JSON berisi string tanggal ISO 8601, bidang Date yang dihasilkan gagal saat dekode

Alat ini memetakan string ISO 8601 ke String secara default; Swift tidak mengonversinya secara otomatis ke Date. Anda perlu mengatur dateDecodingStrategy di JSONDecoder, mis. JSONDecoder().dateDecodingStrategy = .iso8601. Jika format tanggal tidak standar, Anda juga perlu mengimplementasikan DateFormatter atau logika parsing kustom secara manual.

Bersarang terlalu dalam, konflik nama

Alat ini menamai subtipe dengan "menaruh huruf pertama nama bidang dalam huruf kapital". JSON bersarang yang dalam dapat memiliki objek bertingkat dengan nama yang sama menyebabkan konflik tipe. Solusi: ① Tambahkan awalan bisnis ke bidang di sumber JSON; ② Bagi root JSON menjadi beberapa modul independen dan hasilkan secara terpisah; ③ Gunakan Rename Xcode untuk mengubah nama tipe yang berkonflik secara massal setelah pembuatan.

public struct dihasilkan tetapi proyek menggunakan isolasi modul

Alat ini menghasilkan internal struct secara default tanpa pengubah public eksplisit. Jika proyek Anda dibagi menjadi modul dan memerlukan akses antar modul, Anda perlu mengganti struct menjadi public struct secara massal di Xcode, atau menambahkan kata kunci public secara seragam menggunakan skrip sed/awk setelah pembuatan.

Glosarium

struct
Tipe nilai di Swift. Cocok secara default untuk mewakili model data yang tidak dapat diubah; nilai disalin saat penugasan. Alat ini menghasilkan struct secara default untuk mewakili objek JSON.
class
Tipe referensi di Swift. Cocok untuk skenario yang membutuhkan status bersama, pewarisan, atau identitas (===). Alat ini dapat menghasilkan class dalam konfigurasi tertentu.
Optional (?)
Pengubah tipe di Swift yang menunjukkan bahwa nilai dapat berupa nil, mis. var name: String?. Bidang yang dihasilkan oleh alat ini adalah non-Optional secara default; Anda dapat menambahkan ? secara manual setelah pembuatan berdasarkan apakah bidang JSON dapat tidak ada.
Array ([T])
Singkatan untuk tipe array di Swift. Alat ini mengonversi array JSON menjadi [T], di mana T disimpulkan dari tipe elemen array, mis. [String], [Int], atau [tipe kustom].
Codable
Kombinasi protokol Decodable dan Encodable di Swift. Setelah mengimplementasikan Codable, JSONDecoder dapat mengurai data JSON menjadi instans tipe. Alat ini tidak menghasilkan Codable secara default; harus ditambahkan secara manual.
JSONDecoder
Parser JSON dalam framework Foundation. Digunakan dengan protokol Codable untuk mengonversi Data menjadi instans tipe Swift. Setelah alat ini menghasilkan tipe murni, pengembang dapat menggunakan JSONDecoder untuk parsing.
URLSession
API jaringan dalam framework Foundation Apple. Penggunaan umum adalah URLSession.shared.data(from: url), yang bersama dengan JSONDecoder menyelesaikan integrasi API.
Alamofire
Pustaka jaringan HTTP pihak ketiga paling populer di komunitas Swift. Dibangun di atas URLSession, mendukung responseDecodable untuk deserialisasi langsung ke tipe Swift.
Moya
Lapisan abstraksi jaringan Swift, sering dipasangkan dengan Alamofire. Moya dikombinasikan dengan tipe Codable dapat menyederhanakan kode boilerplate panggilan API secara signifikan.
Vapor
Framework sisi server utama untuk Swift, digunakan untuk membangun aplikasi web di macOS / Linux. Struct Swift yang dihasilkan oleh alat ini juga dapat digunakan untuk model rute Vapor.
quicktype
Generator tipe multibahasa sumber terbuka. Alat ini menyelesaikan konversi JSON ke Swift melalui quicktype-core di Web Worker browser.
Property
Deklarasi properti dalam tipe Swift. Alat ini memetakan setiap kunci JSON ke properti Swift; mis. "name": "Alice" dipetakan ke var name: String.
Type Inference
Proses menyimpulkan tipe Swift secara otomatis dari bentuk literal nilai JSON. Alat ini memetakan berdasarkan null, boolean, number, string, array, dan object.
localStorage
Penyimpanan kunci-nilai lokal browser. Alat ini menggunakan localStorage untuk menyimpan riwayat input terbaru untuk pemulihan setelah menyegarkan atau menutup halaman secara tidak sengaja.
Web Worker
Mekanisme thread latar belakang yang disediakan oleh browser. Alat ini memuat dan menjalankan quicktype-core melalui Web Worker untuk mencegah konversi JSON besar memblokir thread utama.
SwiftUI
Framework UI deklaratif Apple. Tipe Swift yang dihasilkan oleh alat ini dapat berfungsi sebagai model data untuk tampilan SwiftUI, mengendalikan antarmuka dengan @State / @ObservedObject.
Combine
Framework pemrograman reaktif Apple. Tipe Swift yang dihasilkan dikombinasikan dengan JSONDecoder dapat membangun aliran data reaktif dataTaskPublisher.
SwiftData
Framework persistensi data Apple yang diperkenalkan pada 2023. Tipe yang dihasilkan oleh alat ini dapat berfungsi sebagai kelas dasar model SwiftData; menambahkan @Model membuatnya dapat dikelola oleh SwiftData.
Value Type / Reference Type
Di Swift, struct adalah tipe nilai dan class adalah tipe referensi. Alat ini menghasilkan struct secara default, yang disalin saat penugasan; jika semantik referensi diperlukan, Anda dapat mengubah secara manual ke class.
Field Naming
Alat ini mempertahankan nama bidang JSON asli secara default. Jika sumber JSON menggunakan snake_case dan proyek membutuhkan camelCase, Anda harus mengganti nama secara manual setelah pembuatan atau menyesuaikan renderer quicktype.
ISO 8601 Date
Format tanggal JSON umum, mis. 2026-07-14T10:00:00Z. Memerlukan JSONDecoder().dateDecodingStrategy = .iso8601 untuk diurai dengan benar ke tipe Date.

Tabel referensi cepat pemetaan tipe JSON ke tipe Swift

Alat ini secara otomatis menyimpulkan tipe Swift yang sesuai berdasarkan bentuk nilai JSON:

Contoh nilai JSONMetode deteksiTipe Swift yang dihasilkanCatatan
nullvalue === nullAny? atau Optional konkretTidak dapat menyimpulkan tipe konkret; disarankan untuk mengubah secara manual ke Optional<T> setelah pembuatan
true / falsetypeof value === 'boolean'BoolDipetakan langsung ke tipe Bool Swift
42typeof value === 'number' && Number.isInteger(value)IntBilangan bulat dipetakan ke Int (32/64 bit ditentukan oleh platform)
3.14typeof value === 'number' && !Number.isInteger(value)DoubleBilangan pecahan dipetakan ke Double
"hello"typeof value === 'string'StringString dipetakan ke String
[] (array kosong)Array.isArray(value) && value.length === 0[Any]Tidak dapat menyimpulkan tipe elemen; disarankan menambahkan contoh atau mengubah secara manual ke tipe konkret
["a", "b"]Array.isArray(value) && typeof value[0] === 'string'[String]Array string
[1, 2, 3]Array.isArray(value) && typeof value[0] === 'number'[Int]Array bilangan bulat
[1.5, 2.5]Array.isArray(value) && typeof value[0] === 'number' && !Number.isInteger(value[0])[Double]Array float
[{...}, {...}]Array.isArray(value) && typeof value[0] === 'object'[Item]Array objek, elemen adalah tipe kustom, nama disimpulkan dari nama bidang
{...} (objek bertingkat)typeof value === 'object' && !Array.isArray(value)struct / class independenMenghasilkan tipe independen secara rekursif, dinamai dengan huruf pertama bidang dalam huruf kapital

Common Use Cases for JSON to Swift in the Apple Ecosystem

Generated Swift types can be directly used in different scenarios on Apple platforms/third-party frameworks:

Use CaseCommon FrameworksRequired Protocols/ProcessingTypical Code Snippet
REST API parsingURLSession + JSONDecoderAdd Codable to types, maintain struct value semanticstry JSONDecoder().decode(User.self, from: data)
Simplified HTTP requestsAlamofireAdd Codable to types, pair with responseDecodablesession.request(url).responseDecodable(of: User.self)
Abstract network layerMoyaAdd Codable to types, Moya auto-deserializesprovider.request(.user(id: 1)).map(User.self)
Reactive data streamsCombine + JSONDecoderAdd Codable to types, combine with dataTaskPublisherURLSession.shared.dataTaskPublisher(for: url).decode(type: User.self, decoder: decoder)
SwiftUI list displaySwiftUI List + IdentifiableAdd Identifiable to types for automatic List forEachList(items) { Text($0.name) }
Server model definitionsVaporAdd Codable to types, Vapor auto Content serializationstruct User: Codable, Content { var id: Int; var name: String }
Local persistence modelsSwiftData/Core DataAdd @Model/@NSManaged to generated struct/class@Model class User { var id: Int; var name: String }
Cross-platform type sharingJSON to Swift + JSON to TypeScript combinedKeep Swift and TS field names consistent, pair TS types on TS endSwift: var name: String / TS: name: string

Privacy & Security

Alat JSON ke Swift ini menjalankan semua operasi parsing JSON dan pembuatan tipe Swift sepenuhnya di browser Anda melalui JavaScript (quicktype-core / Web Worker). Data JSON yang Anda masukkan dan kode Swift yang dihasilkan tidak pernah dikirim ke server mana pun, tidak dicatat, di-cache, atau disimpan di cloud. JSON sensitif yang berisi bidang API internal, kunci API, token, data privasi pengguna, atau struktur bisnis yang tidak dipublikasikan dapat digunakan dengan aman; semua konten input dan output secara otomatis dihapus dari memori saat Anda menutup atau menyegarkan halaman, tanpa bergantung pada layanan jaringan pihak ketiga.

Authoritative References