logo
GeekFormat

Công cụ JSON sang Swift trực tuyến miễn phí, chuyển đổi một cú nhấp chuột phản hồi API, tệp cấu hình hoặc JSON nhật ký thành khai báo kiểu struct / class Swift thuần. Không cần đăng ký, không tải lên, tạo tức thì trên trình duyệt cục bộ, phù hợp để mô hình hóa nhanh cho dự án iOS, macOS, watchOS và tvOS.

Đề xuất Liên quan

Về JSON sang Swift: Biến dữ liệu JSON thành kiểu gốc hệ sinh thái Apple

JSON sang Swift là quá trình tự động chuyển đổi dữ liệu định dạng JSON (đối tượng hoặc mảng) thành khai báo kiểu Swift struct / class. JSON là tiêu chuẩn thực tế của REST API, tệp cấu hình, nhật ký theo dõi, còn Swift là ngôn ngữ phát triển chính của ứng dụng iOS, macOS, watchOS, tvOS, cũng là ngôn ngữ cốt lõi của framework phía máy chủ như Vapor. Trong phát triển thường cần viết JSON trả về từ API thành kiểu Swift tương ứng, viết tay không chỉ tốn thời gian mà còn dễ bỏ sót trường tùy chọn, tác dụng của công cụ này là tự động hóa quá trình này.

Công cụ này sử dụng quicktype-core để hoàn thành chuyển đổi cục bộ trên trình duyệt. quicktype là công cụ tạo cấu trúc đa ngôn ngữ, công cụ này bật tùy chọn just-types và no-comments cho Swift, do đó đầu ra là khai báo thuộc tính struct / class sạch sẽ, không chứa chú thích tuần tự hóa Codable, Decodable, Encodable, cũng không chứa câu lệnh import hoặc chú thích đầu tệp. Kiểu「trần」này thuận tiện cho nhà phát triển tự do thêm giao thức, điều chỉnh kiểm soát truy cập theo nhu cầu dự án, hoặc đổi thành quy ước đặt tên ưa thích của framework mạng như Alamofire / Moya.

Hệ thống kiểu của Swift nổi tiếng về an toàn. struct là kiểu giá trị, phù hợp để biểu diễn mô hình dữ liệu bất biến; class là kiểu tham chiếu, phù hợp cho các tình huống cần chia sẻ trạng thái hoặc kế thừa. Các thuộc tính tạo ra bởi công cụ này sẽ ánh xạ尽可能 đến String, Int, Double, Bool, [T], kiểu tùy chỉnh của Swift, v.v. Nhà phát triển có thể sau khi tạo đổi một số trường thành Optional (?) theo nhu cầu nghiệp vụ, thêm giao thức Codable cho kiểu, hoặc nâng cấp toàn bộ struct thành class để có ngữ nghĩa tham chiếu.

Xử lý đối tượng lồng nhau là khả năng quan trọng của công cụ. Khi JSON chứa đối tượng lồng nhau, công cụ sẽ đệ quy tạo kiểu con độc lập, ví dụ khi Root chứa đối tượng address sẽ tạo kiểu Address, trong kiểu chính tham chiếu qua var address: Address. Điều này tránh định nghĩa lặp lại kiểu, cũng cho phép tự động hoàn thành và kiểm tra kiểu của Xcode theo dõi chính xác quan hệ phân cấp. Quy tắc đặt tên sử dụng viết hoa chữ cái đầu của tên trường, ví dụ phần tử trong mảng users sẽ được đặt tên là User.

Suy luận kiểu mảng tuân theo chiến lược「suy luận theo phần tử đầu tiên」. Nếu phần tử mảng là chuỗi thì tạo [String], là số nguyên thì tạo [Int], là số thực thì tạo [Double], là đối tượng thì tạo [kiểu tùy chỉnh]. Mảng rỗng [] do thiếu mẫu, sẽ tạo [Any] hoặc kiểu dự phòng, sau khi tạo khuyến nghị đổi thành kiểu cụ thể theo nghiệp vụ thực tế. Đối với mảng đặc biệt lớn hoặc mảng thưa, khuyến nghị đặt phần tử mẫu thực vào JSON gốc, nâng cao độ chính xác suy luận.

Xử lý thuần frontend là ưu thế kiến trúc cốt lõi của công cụ này. Tất cả phân tích JSON và tạo code Swift đều thực thi trong JavaScript trình duyệt (bao gồm quicktype-core trong Web Worker), không phụ thuộc dịch vụ backend, cũng không gửi dữ liệu đến bất kỳ máy chủ nào. Thiết kế này vừa bảo vệ dữ liệu JSON có thể chứa thông tin nhạy cảm, vừa đảm bảo tốc độ chuyển đổi chỉ bị giới hạn bởi hiệu suất thiết bị cục bộ, không cần chờ đợi mạng đi lại. Đặc biệt quan trọng khi xử lý JSON chứa khóa API, trường nghiệp vụ chưa công khai.

Công cụ này khác với một số công cụ trực tuyến gắn chặt chiến lược giải mã Codable / CodingKeys / Date: các thành viên nhóm phát triển thường có sở thích khác nhau về giao thức, đặt tên, kiểm soát truy cập, công cụ này kiên trì nguyên tắc đầu ra tối thiểu, để lại lựa chọn giao thức và chiến lược cho nhà phát triển tùy chỉnh theo dự án. Quy trình làm việc「tạo bán thành phẩm + tùy chỉnh cấp dự án」này, trong các nhóm vừa và lớn thường được kỹ sư đón nhận hơn「một cú nhấp chuột toàn bộ」.

Trường hợp sử dụng

  • Phát triển iOS: Chuyển JSON trả về từ REST API backend thành Swift struct, dùng để mô hình hóa lớp mạng SwiftUI hoặc UIKit và giải mã JSONDecoder
  • Phát triển macOS: Chuyển JSON cấu hình ứng dụng thành kiểu Swift, đọc cấu hình an toàn kiểu trong dự án AppKit, tránh lỗi chính tả
  • Phát triển watchOS: Chuyển JSON dữ liệu sức khỏe, vận động cho ứng dụng Apple Watch thành mô hình Swift và kết nối SwiftUI với HealthKit
  • Phát triển tvOS: Chuyển JSON giao diện đề xuất nội dung thành kiểu Swift, dùng cho hiển thị dữ liệu trang chủ ứng dụng TV và điều hướng tiêu điểm
  • Mô hình hóa SwiftUI MVVM: Liên kết trực tiếp mô hình dữ liệu API làm thuộc tính @Published vào ViewModel, sau đó điều khiển giao diện xem
  • Luồng dữ liệu phản ứng Combine: Sử dụng kiểu phản hồi JSON làm kiểu đầu ra của Publisher, kết hợp JSONDecoder để phân tích phản ứng
  • Mô hình hóa trước SwiftData / Core Data: Tạo Swift struct trước, sau đó thủ công thêm chú thích @Model hoặc @NSManaged để ánh xạ thực thể
  • Kết nối SDK bên thứ ba: Chuyển mẫu JSON phản hồi trong tài liệu SDK thành kiểu Swift, nhanh chóng kết nối SDK đăng nhập, thanh toán, thông báo đẩy, bản đồ, v.v.
  • Chuẩn bị kiểm thử đơn vị: Chuyển JSON mock giao diện thành kiểu Swift sau đó dùng cho dữ liệu kiểm thử và khẳng định XCTest, nâng cao khả năng bảo trì kiểm thử
  • Đánh giá code: Chuyển JSON trả về API thành kiểu Swift, thuận tiện cho nhóm thảo luận đặt tên trường và tính tùy chọn khi Code Review
  • Phát triển kết hợp Flutter / React Native: Chuẩn bị mô hình dữ liệu để gọi module Swift gốc, giảm lỗi chuyển đổi kiểu lớp bridge
  • Di chuyển giao diện backend: Tạo mô hình client Swift từ tài liệu giao diện REST hoặc mẫu JSON Postman, đồng bộ nhanh chóng khi nâng cấp phiên bản
  • Đào tạo giảng dạy: Trình bày ánh xạ từ JSON sang hệ thống kiểu trong khóa học Swift / iOS, giúp sinh viên hiểu mô hình hóa dữ liệu API và an toàn kiểu
  • Ứng dụng sức khỏe và thể dục: Chuyển JSON trả về từ giao diện HealthKit / Fitbit thành kiểu Swift, dùng cho mô hình hóa dữ liệu Apple Health
  • Ứng dụng thanh toán và tài chính: Chuyển JSON phản hồi giao diện cổng thanh toán thành mô hình Swift, thuận tiện cho đối soát và xử lý ngoại lệ
  • Hệ thống đơn hàng thương mại điện tử: Chuyển JSON đơn hàng, sản phẩm, địa chỉ thành Swift struct, kết hợp danh sách SwiftUI và trang chi tiết để hiển thị
  • Ứng dụng tin tức và nội dung: Chuyển JSON phản hồi hệ thống quản lý nội dung thành kiểu Swift, dùng cho TableView / danh sách SwiftUI / trang chi tiết
  • Phát triển phía máy chủ Vapor: Chuyển JSON yêu cầu/phản hồi của API backend thành struct Swift, dùng cho định nghĩa mô hình phía máy chủ và mã hóa/giải mã Codable
  • MapKit và dữ liệu địa lý: Chuyển JSON trả về từ giao diện bản đồ thành Swift struct, dùng cho tìm kiếm địa điểm, lập kế hoạch tuyến đường, mô hình hóa kết quả mã hóa địa lý

Cách Sử dụng

  1. Dán nội dung JSON vào trình soạn thảo bên trái, hoặc nhấp nút tải lên để chọn tệp .json / .txt, cũng có thể tải dữ liệu mẫu tích hợp
  2. Công cụ sẽ tự động gọi quicktype-core để chuyển đổi sau 400ms debounce, bên phải hiển thị code Swift struct / class tạo ra
  3. Nếu JSON định dạng lỗi, nhấp nút「Sửa JSON」để tự động sửa các vấn đề cú pháp phổ biến (dấu phẩy đuôi, dấu nháy đơn, thiếu dấu nháy, v.v.)
  4. Kiểm tra kết quả tạo ra, có thể thủ công thêm các giao thức Codable / Equatable / Identifiable theo nhu cầu dự án; nhấp「Sao chép」để dán vào Xcode, hoặc nhấp「Tải xuống」để lưu thành tệp .swift

Tính năng

  • Chuyển đổi hoàn toàn trên trình duyệt cục bộ: Phân tích JSON và tạo code Swift đều được hoàn thành bằng quicktype-core trong trình duyệt, JSON gốc và code tạo ra đều không được tải lên bất kỳ máy chủ nào
  • Chế độ quicktype-core just-types: Đầu ra là khai báo thuộc tính struct / class Swift sạch sẽ, không có import, không có chú thích Codable / CodingKeys, thuận tiện để tùy chỉnh theo nhu cầu dự án
  • Tự động chuyển đổi sau 400ms debounce: Tạo kiểu Swift gần như tức thì sau khi dán hoặc sửa đổi JSON, không cần nhấp nút chuyển đổi lặp lại, quá trình chuyển đổi hoàn toàn bất đồng bộ không chặn UI
  • Thực thi nền Web Worker: quicktype-core chạy trong Web Worker của trình duyệt, tránh đóng băng luồng chính và giật lag khi chỉnh sửa với JSON lớn
  • Suy luận kiểu thông minh: Tự động ánh xạ String, Int, Double, Bool, [T], kiểu tùy chỉnh, mảng được suy luận theo kiểu phần tử đầu tiên, không cần viết tay kiểu trường
  • Tự động mở rộng đối tượng lồng nhau: Đệ quy tạo kiểu Swift độc lập cho mỗi đối tượng lồng nhau, đặt tên theo viết hoa chữ cái đầu của tên trường, tránh định nghĩa lặp lại kiểu
  • Tự động suy luận kiểu mảng: Mảng JSON tự động chuyển thành [String] / [Int] / [Double] / [kiểu tùy chỉnh], mảng rỗng mặc định tạo [Any]
  • Sửa lỗi JSON một cú nhấp chuột: Khi gặp lỗi định dạng phổ biến như dấu phẩy đuôi, dấu nháy đơn, thiếu dấu nháy, comment, có thể tự động sửa một cú nhấp chuột và tiếp tục chuyển đổi
  • Sao chép một cú nhấp chuột + tải xuống .swift: Sao chép code Swift tạo ra vào bộ nhớ đệm một cú nhấp chuột, hoặc tải xuống dưới dạng tệp .swift để kéo thả trực tiếp vào dự án Xcode
  • Dữ liệu mẫu + tải tệp: Tích hợp JSON mẫu phong cách Swift (bao gồm address / company / tags lồng nhau), hỗ trợ kéo thả hoặc nhấp để tải tệp .json / .txt
  • Lịch sử đầu vào localStorage: Tự động lưu đầu vào gần đây, có thể khôi phục nhanh chóng để tiếp tục chỉnh sửa sau khi làm mới hoặc đóng nhầm trang, không lo mất nội dung
  • Trình soạn thảo chia màn hình responsive: Xem trước tức thì chia màn hình trái phải, tự điều chỉnh cho máy tính để bàn và thiết bị di động, màn hình nhỏ cũng có thể thao tác mượt mà

Ví dụ mã

Swift: Phân tích struct tạo ra bằng URLSession + JSONDecoder

swift

Cách sử dụng phổ biến nhất trong dự án iOS / macOS: Thêm Codable vào struct tạo ra bởi công cụ này, sau đó dùng URLSession lấy bất đồng bộ và giải mã bằng JSONDecoder.

import Foundation

// 1) Kiểu gốc tạo ra bởi công cụ này (bổ sung giao thức Codable)
struct User: Codable {
    let id: Int
    let name: String
    let email: String
    let isActive: Bool
    let tags: [String]
}

// 2) URLSession lấy bất đồng bộ và giải mã
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) Ví dụ sử dụng (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: Giải tuần tự hóa kiểu tạo ra bằng Alamofire responseDecodable

swift

Khi sử dụng Alamofire, có thể trực tiếp dùng responseDecodable để tự động giải mã struct tạo ra bởi công cụ này thành đối tượng Swift.

import Foundation
import Alamofire

// Kiểu tạo ra bởi công cụ này, thêm Codable sau đó trực tiếp sử dụng được
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
    }

    /// Alamofire 5 async/await phong cách responseDecodable
    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)
                    }
                }
        }
    }
}

// Ví dụ gọi phong cách Moya
// provider.request(.product(id: 1)).map(Product.self)
// let product: Product = try await provider.request(.product(id: 1)).map(Product.self)

Swift: Phân tích phản ứng bằng Combine + JSONDecoder

swift

Trong dự án SwiftUI / Combine, có thể sử dụng struct tạo ra cùng với dataTaskPublisher / decode, để tạo luồng dữ liệu phản ứng.

import Foundation
import Combine

// Kiểu gốc tạo ra bởi công cụ này
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
    }

    /// Dùng Combine để lộ luồng dữ liệu
    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()
    }

    /// Đăng ký trong 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

Câu hỏi Thường gặp

Làm thế nào để chuyển JSON thành struct Swift?

Dán nội dung JSON vào ô nhập liệu bên trái, công cụ sẽ tự động gọi quicktype-core để chuyển đổi thành code Swift sau 400ms debounce, và hiển thị kết quả tức thì ở bảng điều khiển bên phải. Bạn cũng có thể nhấp nút tải lên để chọn tệp .json / .txt, hoặc nhấp nút mẫu để tải dữ liệu tích hợp. Sau khi chuyển đổi xong, có thể sao chép một cú nhấp chuột hoặc tải xuống dưới dạng tệp .swift.

Code Swift tạo ra có bao gồm Codable không?

Mặc định không bao gồm. Công cụ này sử dụng chế độ just-types của quicktype-core, đầu ra là khai báo thuộc tính struct / class thuần, không có chú thích Codable, Decodable hoặc Encodable, cũng không có câu lệnh import. Nếu bạn cần Codable, chỉ cần thêm : Codable thủ công sau khi tạo (ví dụ struct User: Codable {}), hoặc tự viết logic phân tích JSONDecoder.

Hỗ trợ những cấu trúc dữ liệu JSON nào?

Hỗ trợ tất cả JSON hợp lệ: kiểu cơ bản (null, boolean, number, string), mảng một chiều hoặc đa chiều, đối tượng lồng nhau độ sâu bất kỳ. Đầu vào gốc có thể là đối tượng JSON hoặc mảng JSON, công cụ sẽ xử lý theo cách ưu tiên đối tượng, mảng suy luận theo phần tử đầu tiên. Đầu vào không được hỗ trợ bao gồm giá trị đặc biệt JavaScript (hàm, Symbol, undefined) và văn bản không phải JSON.

Đối tượng JSON lồng nhau sẽ được xử lý như thế nào?

Công cụ sẽ đệ quy tạo kiểu Swift độc lập cho mỗi đối tượng lồng nhau. Quy tắc đặt tên dựa trên kết hợp tên kiểu cha và tên trường, ví dụ khi Root chứa trường address sẽ tạo kiểu con Address, trong kiểu chính tham chiếu qua var address: Address. Điều này tránh định nghĩa lặp lại kiểu, cũng cho phép tự động hoàn thành và kiểm tra kiểu của Xcode theo dõi chính xác quan hệ phân cấp.

Trường mảng sẽ được chuyển thành mảng Swift không?

Có. Mảng JSON sẽ tự động chuyển thành dạng [T] của Swift. Nếu phần tử mảng là chuỗi thì tạo [String], là số nguyên thì tạo [Int], là số thực thì tạo [Double], là đối tượng thì tạo [kiểu tùy chỉnh]. Mảng rỗng [] do không có phần tử mẫu, mặc định tạo [Any], khuyến nghị sau khi tạo thủ công đổi thành [String] hoặc [Int] và các kiểu cụ thể khác.

Trường giá trị null sẽ tạo ra kiểu gì?

Giá trị null trong JSON không thể suy luận kiểu cụ thể, công cụ có thể tạo Any hoặc kiểu dự phòng. Khuyến nghị thay thế trường có giá trị null trong JSON gốc bằng giá trị mẫu (ví dụ "field": "" suy luận thành String) hoặc thủ công đổi thành Optional theo nghiệp vụ (ví dụ var phone: String?), điều này phù hợp hơn với ngữ nghĩa an toàn của hệ thống kiểu Swift.

Có thể tùy chỉnh tên struct tạo ra không?

Có thể. Nhấp nút tên kiểu trên thanh công cụ (hoặc cửa sổ cài đặt), có thể sửa đổi tên kiểu gốc (mặc định như Root hoặc suy luận theo dữ liệu mẫu). Đặt tên kiểu con sẽ tự động tạo dựa trên tên gốc và tên trường, quy tắc đặt tên là viết hoa chữ cái đầu của tên trường, ví dụ users → User, tags → Tag.

Lỗi định dạng JSON thì sao?

Công cụ sẽ tự động phát hiện tính hợp lệ của JSON, khi lỗi sẽ hiển thị thông báo lỗi cụ thể ở bên phải, và cung cấp nút「Sửa JSON」. Sau khi nhấp có thể tự động sửa lỗi phổ biến: dấu phẩy thừa ở cuối, thay thế dấu nháy đơn bằng dấu nháy kép, bổ sung key thiếu dấu nháy, xóa comment, v.v. Sau khi sửa thành công có thể tiếp tục chuyển đổi, không cần sửa JSON thủ công.

Dữ liệu sẽ được tải lên máy chủ không? An toàn về quyền riêng tư không?

Hoàn toàn chạy trên trình duyệt cục bộ. Tất cả phân tích JSON, tạo code Swift đều được hoàn thành cục bộ bằng JavaScript của trình duyệt (bao gồm quicktype-core trong Web Worker), dữ liệu JSON đầu vào và code Swift tạo ra sẽ không được tải lên bất kỳ máy chủ nào, cũng không được ghi lại hoặc lưu vào bộ nhớ đệm đám mây. JSON nhạy cảm chứa API key, token, trường riêng tư người dùng, cấu trúc nghiệp vụ chưa công khai đều có thể yên tâm sử dụng, đóng trang là xóa.

Code tạo ra có thể sử dụng trực tiếp cho dự án Xcode không?

Có thể. Code tạo ra là cú pháp Swift chuẩn, có thể sao chép trực tiếp vào tệp .swift của Xcode, hoặc lưu thành tệp .swift qua nút「Tải xuống」để kéo thả vào dự án. Vì đầu ra là khai báo kiểu thuần, khuyến nghị thủ công thêm các giao thức Codable, Equatable, Identifiable theo nhu cầu dự án, hoặc điều chỉnh từ bổ sung truy cập (public / internal / private).

Hỗ trợ mảng JSON làm đầu vào gốc không?

Hỗ trợ. Khi đầu vào gốc là mảng JSON, công cụ sẽ sử dụng phần tử đầu tiên của mảng làm mẫu để tạo kiểu phần tử, và xuất ra định nghĩa kiểu phần tử đó. Ví dụ [{"id":1,"name":"A"}] sẽ tạo struct tên Item (hoặc tên suy luận theo trường), các trường của nó chính là trường của phần tử đầu tiên; kiểu chính tham chiếu qua property items: [Item], tránh coi trực tiếp mảng làm kiểu gốc.

Chuyển đổi JSON lớn có bị giật lag không?

Công cụ không có giới hạn kích thước tường minh, nhưng trình duyệt sẽ chậm lại khi phân tích và hiển thị JSON siêu lớn. Khuyến nghị: ① Mỗi lần chỉ chuyển đổi JSON của một module nghiệp vụ; ② Khi cấp lồng quá sâu, tách cấp để xử lý; ③ JSON vượt quá vài MB có thể sử dụng phiên bản dòng lệnh của quicktype để xử lý; ④ Tách cùng một JSON thành nhiều module con để chuyển đổi riêng lẻ có thể giảm đáng kể mức sử dụng bộ nhớ.

Có thể thay thế lẫn nhau với JSON sang TypeScript không?

Cả hai đều chuyển đổi JSON thành định nghĩa kiểu của ngôn ngữ tương ứng, nhưng trọng tâm khác nhau: JSON sang Swift tạo khai báo thuộc tính struct / class, dùng cho ứng dụng gốc iOS / macOS; JSON sang TypeScript tạo khai báo interface / type, dùng cho kiểm tra kiểu frontend. Nếu dự án của bạn đồng thời có client iOS và frontend Web, khuyến nghị tạo hai phiên bản Swift và TS riêng biệt cho cùng một JSON, đảm bảo kiểu hai đầu nhất quán.

Làm thế nào để thêm giao thức Codable vào code tạo ra?

Công cụ này mặc định xuất ra kiểu thuần, không mang giao thức trực tiếp. Sau khi tạo bạn chỉ cần thêm : Codable sau khai báo struct/class, ví dụ struct User: Codable {}, là có thể sử dụng cho JSONDecoder. Nếu bạn muốn mặc định mang Codable, có thể fork quicktype-core và sửa đổi trình kết xuất Swift của nó, hoặc sau khi tạo sử dụng chức năng thay thế hàng loạt của Xcode để thêm giao thức cho tất cả các kiểu.

Cần kết nối mạng không? Thiết bị di động có dùng được không?

Lần đầu truy cập trang cần kết nối mạng để lấy script công cụ và tài nguyên quicktype-core, sau đó có thể chạy ngoại tuyến trong bộ nhớ đệm trình duyệt (trong trình duyệt đã truy cập). Trình duyệt di động (iOS Safari, Android Chrome) cũng có thể sử dụng bình thường, giao diện được thiết kế chia màn hình responsive, khi màn hình dọc sẽ tự động chuyển thành xếp chồng lên xuống.

Sau khi tạo có hỗ trợ sửa đổi riêng lẻ một kiểu mà không phá vỡ các kiểu khác không?

Hỗ trợ. Sau khi tạo mỗi kiểu Swift đều là struct / class độc lập, đầu ra của công cụ là văn bản thuần, bạn có thể sao chép riêng lẻ một kiểu nào đó dán vào Xcode, hoặc sử dụng Rename Refactor trong Xcode để sửa đổi hàng loạt kiểu và trường mà không ảnh hưởng đến các kiểu khác. Nếu cần tạo lại toàn bộ nhóm kiểu, làm mới trang sau đó dán lại JSON là được.

Hỗ trợ suy luận enum Swift không?

Việc hỗ trợ union/enum của quicktype cần thêm type hints hoặc đầu vào GraphQL/JSON Schema. Chỉ dựa trên mẫu JSON khó có thể suy luận enum, do đó công cụ này mặc định không tạo enum. Nếu bạn cần enum, có thể thủ công đổi struct tương ứng thành enum + Codable, hoặc sử dụng công cụ JSON sang Kotlin / TypeScript để lấy kiểu enum trước, sau đó thủ công di chuyển sang Swift.

Xử lý sự cố

Thông báo「Vui lòng nhập dữ liệu JSON」hoặc bên phải trống

Ô nhập liệu bên trái trống hoặc chỉ có ký tự trắng. Vui lòng dán nội dung JSON hợp lệ, hoặc nhấp「Mẫu」để tải ví dụ, hoặc nhấp「Tải lên」để chọn tệp .json / .txt.

Thông báo「Unexpected token ... in JSON」

JSON định dạng không hợp lệ. Nguyên nhân phổ biến: ① Có dấu phẩy thừa ở cuối (ví dụ {"a":1,}); ② Dùng dấu nháy đơn thay vì dấu nháy kép; ③ Cách viết đối tượng JS (ví dụ {key: value}) thay vì JSON (ví dụ {"key": "value"}); ④ Chứa comment JavaScript. Nhấp nút「Sửa JSON」có thể tự động sửa một phần lỗi phổ biến.

Kiểu tạo ra không có Codable, không thể dùng trực tiếp JSONDecoder

Đây là hành vi dự kiến. Công cụ này sử dụng chế độ just-types, xuất ra khai báo thuộc tính struct / class thuần. Nếu cần Codable, vui lòng sau khi tạo thêm : Codable cho kiểu (ví dụ struct User: Codable {}), hoặc viết extension User: Codable {} sau đó mới gọi JSONDecoder.

Mảng rỗng [] tạo ra [Any]

Mảng rỗng không có phần tử mẫu, công cụ sẽ tạo kiểu dự phòng [Any]. Khuyến nghị trong JSON gốc đặt ít nhất một phần tử mẫu (ví dụ [1, 2]), sau khi tạo xóa giá trị mẫu, và thủ công chỉ định kiểu cụ thể; hoặc sau khi tạo trực tiếp đổi thành [String] / [User] và các kiểu chính xác hơn.

Kiểu trường giá trị null không xác định

JSON null không thể suy luận kiểu cụ thể, công cụ có thể tạo Any hoặc kiểu dự phòng. Khuyến nghị thay thế null trong JSON gốc bằng giá trị mẫu đại diện (ví dụ "" hoặc 0), sau khi tạo đổi trường đó thành Optional (?) hoặc kiểu cụ thể, ví dụ var phone: String?.

Tên kiểu tạo ra không phù hợp quy chuẩn dự án

Có thể sửa đổi tên kiểu gốc trên thanh công cụ, tên kiểu con sẽ tự động tạo dựa trên tên gốc + tên trường. Nếu vẫn không hài lòng, sau khi tạo trong Xcode sử dụng Rename Refactor để sửa đổi hàng loạt (chuột phải → Refactor → Rename), Xcode sẽ đồng bộ cập nhật tất cả tham chiếu.

Sau khi chuyển đổi JSON lớn trang bị giật lag

Trình duyệt sẽ chậm lại khi hiển thị JSON siêu lớn và tạo ra nhiều kiểu. Khuyến nghị tách JSON thành nhiều module nghiệp vụ độc lập để chuyển đổi riêng lẻ, hoặc chỉ trích xuất đối tượng quan trọng cần mô hình hóa để chuyển đổi; JSON vượt quá 10MB khuyến nghị sử dụng phiên bản dòng lệnh của quicktype để xử lý.

Xcode biên dịch báo lỗi「Type 'X' does not conform to protocol 'Decodable'」

Cho thấy sau khi bạn thêm Codable cho một số trường, đã không xử lý đúng các kiểu như Optional / Date / Enum. Sửa lỗi phổ biến: ① Đổi tất cả trường có thể null thành Optional<T>; ② Chiến lược ngày tháng tùy chỉnh JSONDecoder().dateDecodingStrategy = .iso8601; ③ CodingKeys tùy chỉnh để cho khóa JSON nhất quán với tên thuộc tính Swift.

Tên trường là snake_case, thói quen Swift là camelCase

Công cụ này mặc định giữ nguyên tên trường gốc của JSON, do đó trường snake_case sẽ được tạo nguyên trạng. Nếu muốn thống nhất thành camelCase, có thể sau khi tạo dùng Xcode Rename đổi tên hàng loạt, hoặc trong trình kết xuất quicktype tùy chỉnh chuyển đổi tên trường thành camelCase, sau đó bổ sung ánh xạ CodingKeys, đảm bảo giải mã JSON chính xác.

Tệp .swift tải xuống mở bằng Xcode sau đó key tiếng Trung báo lỗi

Swift khuyến nghị tên trường là định danh ASCII tiếng Anh. Nếu JSON gốc chứa key tiếng Trung (ví dụ {"tên": "Alice"}), var tạo ra tên: String sẽ làm trình biên dịch Swift báo lỗi đối với một số phiên bản lịch sử. Khuyến nghị trong JSON gốc đổi key thành tiếng Anh (ví dụ name), phù hợp hơn với quy chuẩn mã hóa Swift.

Kiểu chỉ có var, không có điều khiển let / private

Công cụ này mặc định tạo thuộc tính var public, thuận tiện để tùy chỉnh sau khi tạo. Nếu cần let hoặc kiểm soát truy cập (như private(set)), có thể trong Xcode sử dụng Refactor → Add Access Control để sửa đổi hàng loạt, hoặc sau khi tạo dùng công cụ chỉnh sửa văn bản sed / để thay thế var thành let.

JSON chứa chuỗi ngày tháng ISO 8601, tạo trường Date giải mã thất bại

Công cụ này mặc định ánh xạ chuỗi ISO 8601 thành String, Swift sẽ không tự động chuyển thành Date. Cần thiết lập dateDecodingStrategy trong JSONDecoder, ví dụ JSONDecoder().dateDecodingStrategy = .iso8601. Nếu định dạng ngày tháng không chuẩn, còn cần tự triển khai DateFormatter hoặc logic phân tích tùy chỉnh.

Cấp lồng quá sâu, xung đột tên

Công cụ lấy「viết hoa chữ cái đầu tên trường」làm đặt tên kiểu con. Trong JSON lồng sâu có thể xuất hiện đối tượng lồng nhau cùng tên dẫn đến xung đột kiểu. Phương pháp giải quyết: ① Trong JSON gốc thêm tiền tố nghiệp vụ cho trường; ② Tách JSON gốc thành nhiều module độc lập để tạo riêng; ③ Sau khi tạo dùng Xcode Rename sửa đổi hàng loạt tên kiểu bị xung đột.

Tạo ra là public struct nhưng dự án dùng module cách ly

Công cụ này mặc định tạo internal struct, không có bổ nghĩa public tường minh. Nếu dự án tách theo module và cần truy cập xuyên module, cần trong Xcode thay thế hàng loạt struct thành public struct, hoặc sau khi tạo dùng tập lệnh sed/awk để thêm từ khóa public thống kê.

Thuật ngữ

struct
Kiểu giá trị trong Swift. Mặc định phù hợp biểu diễn mô hình dữ liệu bất biến, khi gán giá trị sẽ được sao chép. Công cụ này mặc định tạo struct để biểu diễn đối tượng JSON.
class
Kiểu tham chiếu trong Swift. Phù hợp cho các tình huống cần chia sẻ trạng thái, kế thừa hoặc nhận dạng danh tính (===). Công cụ này có thể tạo class dưới một số cấu hình nhất định.
Optional(?)
Bổ nghĩa kiểu trong Swift biểu thị giá trị có thể là nil, ví dụ var name: String?. Các trường tạo ra bởi công cụ này mặc định không Optional, sau khi tạo có thể thủ công thêm ? theo trường JSON có thể thiếu hay không.
Array([T])
Viết tắt kiểu mảng trong Swift. Công cụ này chuyển mảng JSON thành [T], T suy luận theo kiểu phần tử mảng, ví dụ [String], [Int] hoặc [kiểu tùy chỉnh].
Codable
Tổ hợp giao thức của Decodable và Encodable trong Swift. Sau khi triển khai Codable có thể dùng JSONDecoder để phân tích dữ liệu JSON thành thể hiện kiểu. Công cụ này mặc định không tạo Codable, cần thêm thủ công.
JSONDecoder
Bộ phân tích JSON trong framework Foundation. Sử dụng kết hợp với giao thức Codable, có thể chuyển Data thành thể hiện kiểu Swift. Sau khi công cụ này xuất ra kiểu thuần, nhà phát triển có thể tự phân tích bằng JSONDecoder.
URLSession
API yêu cầu mạng trong framework Foundation của nền tảng Apple. Cách sử dụng phổ biến là URLSession.shared.data(from: url), kết hợp với JSONDecoder để hoàn thành liên kết giao diện.
Alamofire
Thư viện mạng HTTP bên thứ ba phổ biến nhất trong cộng đồng Swift. Đóng gói dựa trên URLSession, hỗ trợ responseDecodable giải tuần tự hóa trực tiếp thành kiểu Swift.
Moya
Lớp trừu tượng mạng Swift, thường kết hợp với Alamofire. Moya kết hợp với kiểu Codable có thể đơn giản hóa đáng kể code mẫu gọi API.
Vapor
Framework phía máy chủ chủ đạo của Swift, sử dụng Swift để xây dựng ứng dụng Web trên macOS / Linux. Struct Swift tạo ra bởi công cụ này cũng có thể sử dụng cho mô hình định tuyến của Vapor.
quicktype
Công cụ mã nguồn mở tạo kiểu đa ngôn ngữ, công cụ này hoàn thành chuyển đổi JSON sang Swift thông qua quicktype-core trong Web Worker trình duyệt.
Property
Khai báo thuộc tính trong kiểu Swift. Công cụ này ánh xạ mỗi key của JSON thành một Swift property, ví dụ "name": "Alice" ánh xạ thành var name: String.
Type Inference
Quá trình tự động suy luận kiểu Swift dựa trên dạng giá trị chữ của JSON. Công cụ này thực hiện ánh xạ dựa trên null, boolean, number, string, array, object.
localStorage
Lưu trữ khóa-giá trị cục bộ của trình duyệt. Công cụ này dùng localStorage để lưu lịch sử đầu vào gần đây, có thể khôi phục sau khi làm mới hoặc đóng nhầm trang.
Web Worker
Cơ chế luồng nền được cung cấp bởi trình duyệt. Công cụ này tải và thực thi quicktype-core thông qua Web Worker, tránh chặn luồng chính khi chuyển đổi JSON lớn.
SwiftUI
Framework UI khai báo được giới thiệu bởi Apple. Kiểu Swift tạo ra bởi công cụ này có thể làm mô hình dữ liệu cho chế độ xem SwiftUI, kết hợp @State / @ObservedObject để điều khiển giao diện.
Combine
Framework lập trình phản ứng của Apple. Kiểu Swift tạo ra kết hợp với JSONDecoder có thể xây dựng luồng dữ liệu phản ứng dataTaskPublisher.
SwiftData
Framework lưu trữ dữ liệu bền vững được Apple giới thiệu năm 2023. Kiểu tạo ra bởi công cụ này có thể làm lớp cơ sở mô hình SwiftData, sau khi thêm @Model là có thể được quản lý bởi SwiftData.
Value Type / Reference Type
Trong Swift struct là kiểu giá trị, class là kiểu tham chiếu. Công cụ này mặc định tạo struct, khi gán giá trị được sao chép; nếu cần ngữ nghĩa tham chiếu có thể thủ công đổi thành class.
Field Naming
Công cụ này mặc định giữ nguyên tên trường gốc của JSON. Nếu JSON gốc là snake_case mà dự án yêu cầu camelCase, cần rename thủ công hoặc tùy chỉnh trình kết xuất quicktype.
ISO 8601 ngày tháng
Định dạng ngày tháng JSON phổ biến, ví dụ 2026-07-14T10:00:00Z. Cần phối hợp JSONDecoder.dateDecodingStrategy = .iso8601 mới có thể phân tích chính xác thành kiểu Date.

Bảng tra cứu nhanh ánh xạ kiểu JSON sang kiểu Swift

Công cụ tự động suy luận kiểu Swift tương ứng dựa trên dạng giá trị JSON:

Ví dụ giá trị JSONPhương pháp xác địnhTạo kiểu SwiftGhi chú
nullvalue === nullAny? hoặc Optional cụ thểKhông thể suy luận kiểu cụ thể, sau khi tạo khuyến nghị thủ công đổi thành Optional<T>
true / falsetypeof value === 'boolean'BoolÁnh xạ trực tiếp thành kiểu boolean Swift
42typeof value === 'number' && Number.isInteger(value)IntSố nguyên ánh xạ thành Int (32/64 bit do nền tảng quyết định)
3.14typeof value === 'number' && !Number.isInteger(value)DoubleSố thực ánh xạ thành Double
"hello"typeof value === 'string'StringChuỗi ánh xạ thành String
[] (mảng rỗng)Array.isArray(value) && value.length === 0[Any]Không thể suy luận kiểu phần tử, khuyến nghị bổ sung mẫu hoặc thủ công sửa đổi thành kiểu cụ thể
["a", "b"]Array.isArray(value) && typeof value[0] === 'string'[String]Mảng chuỗi
[1, 2, 3]Array.isArray(value) && typeof value[0] === 'number'[Int]Mảng số nguyên
[1.5, 2.5]Array.isArray(value) && typeof value[0] === 'number' && !Number.isInteger(value[0])[Double]Mảng số thực
[{...}, {...}]Array.isArray(value) && typeof value[0] === 'object'[Item]Mảng đối tượng, phần tử là kiểu tùy chỉnh, đặt tên suy luận theo tên trường
{...} (đối tượng lồng nhau)typeof value === 'object' && !Array.isArray(value)struct / class độc lậpĐệ quy tạo kiểu độc lập, đặt tên theo viết hoa chữ cái đầu tên trường

Các tình huống sử dụng phổ biến của JSON sang Swift trong hệ sinh thái Apple

Kiểu Swift tạo ra có thể sử dụng trực tiếp cho các tình huống khác nhau của nền tảng Apple / framework bên thứ ba:

Tình huống sử dụngFramework phổ biếnGiao thức / xử lý cần bổ sungĐoạn code điển hình
Phân tích REST APIURLSession + JSONDecoderThêm Codable cho kiểu, giữ ngữ nghĩa giá trị structtry JSONDecoder().decode(User.self, from: data)
Đơn giản hóa yêu cầu HTTPAlamofireThêm Codable cho kiểu, kết hợp responseDecodablesession.request(url).responseDecodable(of: User.self)
Trừu tượng hóa lớp mạngMoyaThêm Codable cho kiểu, Moya tự động giải tuần tự hóaprovider.request(.user(id: 1)).map(User.self)
Luồng dữ liệu phản ứngCombine + JSONDecoderThêm Codable cho kiểu, kết hợp dataTaskPublisherURLSession.shared.dataTaskPublisher(for: url).decode(type: User.self, decoder: decoder)
Hiển thị danh sách SwiftUISwiftUI List + IdentifiableThêm Identifiable cho kiểu, để List tự động forEachList(items) { Text($0.name) }
Định nghĩa mô hình phía máy chủVaporThêm Codable cho kiểu, Vapor tự động tuần tự hóa Contentstruct User: Codable, Content { var id: Int; var name: String }
Mô hình lưu trữ cục bộSwiftData / Core DataTrên struct / class tạo ra thêm @Model / @NSManaged@Model class User { var id: Int; var name: String }
Chia sẻ kiểu đa nền tảngJSON sang Swift + JSON sang TypeScript phối hợpGiữ tên trường Swift và TS nhất quán, đầu TS phối hợp kiểu TSSwift: var name: String / TS: name: string

Privacy & Security

Tất cả các hoạt động phân tích JSON, tạo kiểu Swift của công cụ JSON sang Swift này được hoàn thành hoàn toàn cục bộ trên trình duyệt của bạn thông qua JavaScript (quicktype-core / Web Worker), dữ liệu JSON đầu vào và code Swift tạo ra đều không được tải lên bất kỳ máy chủ nào, cũng không được ghi lại, lưu vào bộ nhớ đệm hoặc lưu trữ trên đám mây. JSON nhạy cảm chứa trường giao diện nội bộ, API key, token, dữ liệu riêng tư người dùng, cấu trúc nghiệp vụ chưa công khai đều có thể yên tâm sử dụng, sau khi đóng hoặc làm mới trang tất cả nội dung đầu vào và đầu ra tự động xóa khỏi bộ nhớ, không phụ thuộc bất kỳ dịch vụ mạng bên thứ ba nào.

Authoritative References