Trình chuyển JSON sang Dart
Tạo các lớp mô hình Dart không cần thư viện phụ thuộc từ một đối tượng JSON hoặc một mảng các đối tượng mẫu. Trình chuyển sẽ hợp nhất mọi phần tử mẫu, tạo lớp lồng nhau, giữ nguyên khóa JSON ban đầu và sinh kiểu trường null-safe chính xác cùng factory constructor fromJson. Bạn có thể thêm phương thức toJson khi cần đầu ra tương thích với jsonEncode. Mẫu và mã được tạo chỉ nằm trong trình duyệt này, không được tải lên hay đưa vào URL.
Cách hoạt động
-
1
Dán mẫu có tính đại diện
Dùng một đối tượng JSON hoặc một mảng đối tượng. Nhiều phần tử giúp phát hiện các trường bị thiếu, có thể nhận null hoặc có kiểu hỗn hợp.
-
2
Chọn tùy chọn Dart
Đặt tên lớp gốc, chọn có để mọi trường nhận null hay không và thêm phương thức toJson nếu cần.
-
3
Kiểm tra và xuất
Xem lại các lớp được suy luận, sau đó sao chép mã hoặc tải tệp models.dart về máy.
Cách JSON được chuyển thành mô hình Dart null-safe
Tài liệu dart:convert chính thức giải thích rằng jsonDecode() tạo ra các giá trị tương thích với JSON như số, chuỗi, Boolean, null, danh sách và map có khóa dạng chuỗi. Không thể mã hóa trực tiếp một lớp mô hình thành JSON, nhưng jsonEncode() có thể gọi phương thức toJson() của lớp đó. Trình chuyển này tạo mẫu tuần tự hóa thủ công mà không thêm annotation json_serializable hay thư viện phụ thuộc.
Giả sử mẫu có một người dùng với địa chỉ lồng nhau. User được tạo sẽ có các trường final và constructor dùng tham số có tên. User.fromJson(Map<String, Object?> json) ép kiểu các giá trị đơn và gọi UserAddress.fromJson() cho đối tượng lồng nhau. Nếu address bị thiếu hoặc là null trong bất kỳ đối tượng mẫu nào, kiểu của nó sẽ thành UserAddress? và factory kiểm tra null trước khi khởi tạo. Khi bật toJson, các mô hình lồng nhau được chuyển đệ quy thành map mà jsonEncode() chấp nhận.
| Giá trị quan sát trong JSON | Kiểu Dart được tạo |
|---|---|
| Số nguyên | int |
| Số thập phân | double |
| Có cả mẫu nguyên và thập phân | num |
| Văn bản | String |
| Giá trị logic | bool |
| Đối tượng lồng nhau | Lớp mô hình được tạo |
| Mảng đồng nhất | List<T> |
| Mảng lồng rỗng hoặc không tương thích | List<Object?> |
| Chỉ có null hoặc các giá trị xung đột | Object? |
Trình chuyển kiểm tra mọi đối tượng trong mảng gốc thay vì chỉ tin vào phần tử đầu tiên. Một trường sẽ có thể nhận null nếu bị thiếu ở một phần tử hoặc có giá trị null rõ ràng. Bạn cũng có thể cho phép mọi trường nhận null khi API thực tế khó đoán hơn mẫu. Hướng dẫn null safety của Dart nêu rằng kiểu mặc định không nhận null và cần ? để chấp nhận null.
Xử lý định danh và giới hạn suy luận
Khóa JSON không nhất thiết phải là tên thành viên Dart hợp lệ. Dấu câu được loại bỏ, các từ được chuyển sang lowerCamelCase, từ khóa dành riêng nhận hậu tố an toàn và tên trùng nhận hậu tố số ổn định. Khóa ban đầu vẫn được giữ nguyên trong json['original-key'] và map toJson(). Tên lớp lồng nhau dùng đường dẫn đầy đủ để các đối tượng địa chỉ không liên quan không vô tình bị gộp thành một lớp.
Một mẫu không thể chứng minh toàn bộ hợp đồng API. Chuỗi JSON không tự động được coi là ngày, UUID hoặc enum, còn mảng rỗng không cung cấp kiểu phần tử. Tên thành viên đối tượng bị lặp cũng không an toàn khi chuyển đổi hai chiều vì trình phân tích JSON thường chỉ giữ giá trị cuối. Hãy đối chiếu mô hình được tạo với tài liệu hoặc schema API trước khi dùng trong production. Công cụ giới hạn kích thước đầu vào, độ sâu lồng nhau, số khai báo được suy luận và kích thước đầu ra để kiểm soát khối lượng xử lý trong trình duyệt.
Câu hỏi thường gặp
Không. Việc phân tích, suy luận, tạo mã, sao chép và tải xuống đều diễn ra trong trình duyệt. JSON và mã Dart được tạo không được gửi qua máy chủ của chúng tôi hay đưa vào URL.
Có. Flutter sử dụng Dart, vì vậy các lớp không cần thư viện phụ thuộc này có thể dùng trong dự án Flutter. Trước tiên, hãy đối chiếu kiểu được suy luận với hợp đồng API thực tế.
Không. Công cụ tạo fromJson thủ công và phương thức toJson tùy chọn mà không phụ thuộc vào package hay build_runner.
Trường được quan sát là null hoặc bị thiếu sẽ có thể nhận null. Bạn có thể chọn cho phép mọi trường được tạo nhận null nếu mẫu không đại diện đầy đủ cho dữ liệu.
Không. Kết quả chỉ phản ánh các giá trị đã quan sát. Hãy dùng nhiều đối tượng mẫu và so sánh kết quả với schema hoặc tài liệu của nhà cung cấp.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bảng tham khảo phím tắt
Tìm phím tắt mặc định theo tài liệu của VS Code, Chrome và Bash dùng GNU Readline trên macOS, Windows và Linux.
Trình định dạng HTML
Định dạng HTML cục bộ trong trình duyệt với thụt lề hai hoặc bốn khoảng trắng. HTML không được tải lên hoặc xác thực.
Bảng tra cứu nhanh Markdown
Tài liệu Markdown thực dụng với bản xem trước thực tế và ví dụ có thể sao chép cho tiêu đề, danh sách, bảng, mã, liên kết, hình ảnh và cú pháp GFM.
Bảng Tra Regex
Tài liệu tham chiếu biểu thức chính quy có thể tìm kiếm cho JavaScript, PCRE2/PHP, Python re và .NET. So sánh mã thông báo, cú pháp riêng của máy, neo, nhóm, lookaround và cờ.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- JSON till Dart-konverterare [SV]
- محول JSON إلى Dart [AR]
- ตัวแปลง JSON เป็น Dart [TH]
- JSON-in-Dart-Konverter [DE]
- Conversor de JSON a Dart [ES]
- Convertisseur JSON vers Dart [FR]
- Konverter JSON ke Dart [ID]
- JSON to Dart 변환기 [KO]
- JSON-naar-Dart-converter [NL]
- Konwerter JSON na Dart [PL]
- JSONからDartへの変換ツール [JA]
- Conversor de JSON para Dart [PT]
- JSON to Dart Converter [EN]
- Convertitore da JSON a Dart [IT]
- Конвертер JSON в Dart [RU]
- JSON'dan Dart'a Dönüştürücü [TR]
- JSON 转 Dart 工具 [ZH]