JSON sang Swift
Không có nội dung
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
- 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
- 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
- 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.)
- 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
swiftCá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
swiftKhi 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
swiftTrong 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
Sau khi tạo ngay lập tức thêm Codable cho kiểu
Công cụ này mặc định xuất ra struct thuần. Sau khi tạo khuyến nghị ngay lập tức thêm : Codable cho tất cả các kiểu, ngược lại JSONDecoder không thể nhận dạng. CodingKeys thường sử dụng enum mặc định là được, chỉ khai báo tường minh khi tên trường JSON không nhất quán với phong cách Swift.
Tất cả trường null trong JSON đều đổi thành Optional
Hệ thống kiểu Swift nghiêm ngặt với nil. Đổi các trường có thể null trong JSON (như tên đệm, URL ảnh đại diện, số điện thoại) thành var phone: String?, để trình biên dịch buộc bạn xử lý nhánh nil, tránh treo thời gian chạy.
Mảng rỗng [] đổi thành kiểu cụ thể thay vì [Any]
Mảng rỗng không thể suy luận kiểu phần tử, công cụ sẽ dự phòng tạo [Any]. Khuyến nghị đặt một mẫu trong JSON gốc (ví dụ [1, 2]) để tạo lại, hoặc thủ công đổi thành [String] / [User] và các kiểu cụ thể khác, để thao tác mảng có an toàn kiểu.
Trường ngày tháng phối hợp JSONDecoder.dateDecodingStrategy
Chuỗi ISO 8601 cần JSONDecoder().dateDecodingStrategy = .iso8601, định dạng không chuẩn cần DateFormatter tùy chỉnh. Đưa JSONDecoder làm singleton tiêm vào lớp mạng, tránh cấu hình riêng cho mỗi API.
Đồng bộ đa nền tảng sử dụng cùng một mẫu JSON
Trong dự án full stack, khuyến nghị coi「mẫu JSON」của API backend làm nguồn sự thật duy nhất, lần lượt dùng JSON sang Swift / TypeScript / Java để tạo kiểu tương ứng, kết hợp CI kiểm tra trường nhất quán, tránh frontend sửa trường, quên đồng bộ đầu iOS / Android.
Khi xung đột đặt tên đối tượng lồng nhau thì tách JSON
JSON lồng sâu dễ xuất hiện đối tượng lồng nhau cùng tên dẫn đến xung đột kiểu. Khuyến nghị tách JSON lớn thành một vài JSON độc lập theo module nghiệp vụ để chuyển đổi riêng lẻ, hoặc thêm tiền tố nghiệp vụ vào tên trường trong JSON gốc (như billingAddress / shippingAddress) để tạo kiểu khác nhau.
Không tải JSON nhạy cảm lên quicktype.io
Phiên bản web chính thức của quicktype sẽ gửi JSON đến backend của họ để kết xuất. Công cụ này chạy hoàn toàn cục bộ, phù hợp xử lý JSON nhạy cảm chứa API key, token, trường giao diện nội bộ, tránh rò rỉ dữ liệu.
Trong dự án Xcode tạo thư mục Models / DTOs
Kiểu Swift tạo ra khuyến nghị đặt thống nhất trong các thư mục Models / DTOs / Network, thuận tiện tái sử dụng xuyên module. Đối với dự án lớn có thể tiếp tục tách theo module nghiệp vụ (như Auth/Models, Order/Models), giảm phình to tệp đơn lẻ.
Khi xử lý JSON lớn 1MB+ ưu tiên tách tập con
Trình duyệt giảm hiệu suất hiển thị rõ ràng với 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ụ (dưới 100KB trải nghiệm tốt nhất), sau khi các module con chuyển đổi xong lần lượt dán vào các tệp .swift khác nhau của Xcode.
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ị JSON | Phương pháp xác định | Tạo kiểu Swift | Ghi chú |
|---|---|---|---|
null | value === null | Any? 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 / false | typeof value === 'boolean' | Bool | Ánh xạ trực tiếp thành kiểu boolean Swift |
42 | typeof value === 'number' && Number.isInteger(value) | Int | Số nguyên ánh xạ thành Int (32/64 bit do nền tảng quyết định) |
3.14 | typeof value === 'number' && !Number.isInteger(value) | Double | Số thực ánh xạ thành Double |
"hello" | typeof value === 'string' | String | Chuỗ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ụng | Framework phổ biến | Giao thức / xử lý cần bổ sung | Đoạn code điển hình |
|---|---|---|---|
Phân tích REST API | URLSession + JSONDecoder | Thêm Codable cho kiểu, giữ ngữ nghĩa giá trị struct | try JSONDecoder().decode(User.self, from: data) |
Đơn giản hóa yêu cầu HTTP | Alamofire | Thêm Codable cho kiểu, kết hợp responseDecodable | session.request(url).responseDecodable(of: User.self) |
Trừu tượng hóa lớp mạng | Moya | Thêm Codable cho kiểu, Moya tự động giải tuần tự hóa | provider.request(.user(id: 1)).map(User.self) |
Luồng dữ liệu phản ứng | Combine + JSONDecoder | Thêm Codable cho kiểu, kết hợp dataTaskPublisher | URLSession.shared.dataTaskPublisher(for: url).decode(type: User.self, decoder: decoder) |
Hiển thị danh sách SwiftUI | SwiftUI List + Identifiable | Thêm Identifiable cho kiểu, để List tự động forEach | List(items) { Text($0.name) } |
Định nghĩa mô hình phía máy chủ | Vapor | Thêm Codable cho kiểu, Vapor tự động tuần tự hóa Content | struct User: Codable, Content { var id: Int; var name: String } |
Mô hình lưu trữ cục bộ | SwiftData / Core Data | Trê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ảng | JSON sang Swift + JSON sang TypeScript phối hợp | Giữ tên trường Swift và TS nhất quán, đầu TS phối hợp kiểu TS | Swift: 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
- Nén JSON
- CSV sang JSON
- JSON sang CSV
- JSON Diff
- JSON Escape / Unescape
- Làm phẳng JSON
- Trình định dạng JSON
- Trinh tao JSON
- Truy vấn JSONPath
- Gộp JSON
- Sửa JSON
- Trình Xác Thực JSON Schema
- Sắp xếp JSON
- JSON Stringify
- JSON sang HTML
- JSON sang Java
- JSON sang Markdown
- JSON sang SQL
- JSON sang TOML
- JSON sang TypeScript
- XML sang JSON
- Chuyen JSON sang XML
- YAML sang JSON
- JSON → YAML
- JSON sang Go
- JSON sang Rust
- JSON sang Swift
- JSON sang C#
- JSON sang C++
- JSON sang PHP
- JSON sang Python