JSON to POJO online: class hoặc record Java cho JSON của bạn
Dán JSON của bạn và nhận mã Java dùng ngay: mỗi đối tượng là một class, có trường private, hàm khởi tạo không tham số cùng getter và setter, hoặc record Java nếu bạn muốn. Đối tượng lồng nhau được viết bên trong class cha, nên toàn bộ kết quả nằm gọn trong một tệp .java. Thêm chú thích Jackson hoặc Gson khi bạn cần giữ khóa JSON gốc. Việc chuyển đổi diễn ra trong trình duyệt và JSON của bạn không bị tải lên.
JSON to POJO online: cách dùng từng bước
- Dán JSON vào ô JSON (ô hiển thị “Dán JSON vào đây...”). Văn bản dán vào được chuyển đổi ngay. Khi bạn gõ, mã được cập nhật khoảng 300 mili giây sau khi bạn dừng.
- Đọc các class bên dưới Mã Java. Dòng ngay dưới, chẳng hạn “Đã tạo 2 class.”, cho biết có bao nhiêu class được viết.
- Chọn Sao chép, ngay dưới phần mã. Nút hiện “Đã sao chép” trong giây lát. Lưu mã vào một tệp đặt theo tên class gốc, ví dụ
Root.java. - Để đổi kết quả, mở Cài đặt: nhập Tên lớp gốc (mặc định là
Root), chọn trong Chú thích (annotation) giữa Không, Jackson hoặc Gson, hoặc đánh dấu Dùng record thay cho class. Mã cập nhật ngay khi bạn đổi một cài đặt. - Chọn Xóa để làm trống ô và bắt đầu lại.
JSON to POJO online converter: ví dụ với class Java
Đây là nội dung bạn dán: { "user_id": 7, "name": "Ana", "price": 4.5, "tags": ["a", "b"], "address": { "city": "Kyoto" } }
Khi Chú thích (annotation) đặt ở “Không”, kết quả bắt đầu bằng import java.util.List; và public class Root. Các trường là Integer userId, String name, Double price, List<String> tags và Address address. Tiếp theo là hàm khởi tạo không tham số cùng getter và setter như getUserId và setUserId.
Đối tượng lồng nhau address trở thành Address, một public static class nằm trong Root, vì vậy một tệp là đủ. Khóa user_id trở thành trường userId. Dòng trạng thái báo cho bạn biết: “Đã đổi 1 tên trường để phù hợp với Java.”
JSON to POJO Jackson: record và chú thích
Đặt Tên lớp gốc là Order, chọn Jackson ở Chú thích (annotation) và đánh dấu Dùng record thay cho class. Cùng JSON đó sẽ thành public record Order(...).
Mỗi thành phần của record mang @JsonProperty("key") với khóa JSON gốc, nên user_id vẫn ánh xạ tới userId. Nếu bạn chọn Gson, các thành phần đó mang @SerializedName("key"), kèm phần import của Gson. Record cần Java 16 trở lên.
Kiểu JSON trở thành kiểu Java như thế nào
Mọi kiểu đều là kiểu bọc, nên trường nào cũng có thể vắng mặt hoặc là null.
- Số nguyên như
7:Integer. Quá lớn so với kiểu đó (12345678901):Long. Còn lớn hơn nữa (99999999999999999999):BigInteger, kèm import. - Số có dấu thập phân hoặc số mũ, như
4.5,1.0hay2e3:Double. - Văn bản:
String.truehoặcfalse:Boolean(getter làgetActive, không phảiisActive).null:Object. - Mảng cùng một kiểu, như
["a", "b"]:List<String>, có importjava.util.List. Mảng rỗng hoặc lẫn nhiều kiểu:List<Object>. Mảng trong mảng:List<List<Integer>>. - Đối tượng: một class hoặc record lồng nhau đặt tên theo khóa.
Số được đọc đúng như cách viết, nên một ID dài không bao giờ bị làm tròn. Phần import chỉ xuất hiện khi mã cần đến. Nếu một khóa xuất hiện hai lần trong cùng một đối tượng, khóa cuối cùng được dùng.
Tên class và tên trường được chọn như thế nào
user_idvàuser-nametrở thành các trườnguserIdvàuserName(camelCase).- Từ khóa của Java như
classtrở thành_class. - Tên bắt đầu bằng chữ số, như
2nd, trở thành_2nd. - Khóa
itemschứa mảng đối tượng cho ra classItemvà trườngList<Item>: khóa được đưa về số ít. - Khóa
Stringchứa một đối tượng cho raStringData. Những tên sẽ che mấtString,ListhoặcObjectđược thêmDataở cuối. - Hai đối tượng trùng tên: class thứ hai được thêm một số, vì tên class phải duy nhất trong tệp.
Tên class gốc được làm sạch thành tên Java hợp lệ, và ô để trống sẽ cho ra Root. Khi chính JSON bắt đầu bằng một mảng đối tượng, Root mô tả một phần tử và trang nhắc bạn đọc JSON như List<Root>.
Khi JSON không được chấp nhận
Trình đọc rất nghiêm ngặt, đúng như JSON: chú thích, dấu nháy đơn và dấu phẩy thừa ở cuối đều là lỗi. Dưới dòng “Không thể đọc JSON này” có lý do rõ ràng cùng vị trí, như “Dòng 3, cột 5”, chẳng hạn “Trình phân tích dừng lại ở “}”. Hãy kiểm tra xem ngay trước đó có thiếu dấu phẩy, dấu hai chấm, dấu ngoặc hoặc dấu nháy không.”
- Nếu văn bản của bạn là đối tượng JavaScript với khóa không có dấu nháy hoặc dùng dấu nháy đơn, hãy cho qua “Chuyển đối tượng JavaScript sang JSON” trước để có JSON chuẩn.
- Để sắp xếp lại JSON trước khi chuyển đổi, dùng “Định dạng JSON”.
- Để kiểm tra JSON theo một schema, dùng “Trình kiểm tra JSON Schema”.
- Muốn có interface TypeScript từ JavaScript, xem “Chuyển JS sang TS”.
JSON hợp lệ nhưng không chứa đối tượng nào, như 42 hoặc một mảng số, sẽ hiện “JSON này không có đối tượng nào để chuyển thành class.” Văn bản dài hơn 2.000.000 ký tự bị từ chối, và độ lồng sâu hơn 200 cấp cũng vậy.
Câu hỏi thường gặp
Làm sao biến JSON thành POJO trong Java?
Dán JSON vào ô “JSON” rồi sao chép mã ở “Mã Java”. Bạn nhận được một class cho mỗi đối tượng JSON, với trường private, hàm khởi tạo public không tham số và các phương thức public getX, setX. Lưu mã vào tệp đặt theo tên class gốc, ví dụ Root.java, rồi đọc JSON bằng Jackson hoặc Gson.
Làm sao biến một mảng JSON thành các đối tượng Java?
Dán nguyên mảng đối tượng. Công cụ mô tả một phần tử của mảng làm class gốc và nhắc bạn đọc JSON như List. Với Jackson, đó là TypeReference>; với Gson là TypeToken>. Một mảng nằm trong đối tượng sẽ thành trường List, với class đặt tên theo khóa.
JSON POJO Jackson: làm sao giữ khóa JSON gốc?
Mở “Cài đặt” và chọn Jackson hoặc Gson ở “Chú thích (annotation)”. Jackson thêm @JsonProperty("key"), Gson thêm @SerializedName("key") vào từng trường, kèm phần import. Với “Không”, khóa như user_id thành trường userId, và sẽ không ánh xạ ngược về JSON trừ khi khóa gốc được giữ bằng chú thích hoặc chiến lược đặt tên.
Tôi có thể tạo record Java từ JSON không?
Có. Đánh dấu “Dùng record thay cho class” trong “Cài đặt”. Mỗi đối tượng JSON thành public record Name(Type a, Type b) {}, và đối tượng lồng nhau thành record bên trong record cha. Record cần Java 16 trở lên. Chú thích vẫn hoạt động và được đặt trên từng thành phần của record.
Vì sao một số JSON chỗ này là Integer còn chỗ kia là Double?
Kiểu phụ thuộc vào cách số được viết. Số nguyên là Integer, hoặc Long nếu quá lớn với Integer, hoặc BigInteger nếu quá lớn với Long. Số viết có dấu thập phân hoặc số mũ là Double, kể cả khi nó là 1.0.
Điều gì xảy ra khi các đối tượng trong mảng có khóa khác nhau?
Chúng được gộp thành một class chứa mọi khóa xuất hiện ở bất kỳ đối tượng nào, nên khóa chỉ có ở một số đối tượng vẫn có trường riêng. Nếu một khóa chứa nhiều kiểu khác nhau, hoặc mảng rỗng, trường đó có kiểu Object hoặc List. Hãy kiểm tra các trường này bằng tay.
Công cụ có tạo class Kotlin hay chú thích Lombok không?
Không. Kết quả là Java thuần: class có getter và setter, hoặc record. Nếu bạn dùng Lombok, hãy xóa các phương thức getter và setter rồi thêm @Data vào class. Data class của Kotlin bạn cần viết riêng.
JSON to POJO online Java này có tải JSON lên không, và giới hạn bao nhiêu?
Tối đa 2.000.000 ký tự, lồng sâu tới 200 cấp. Việc chuyển đổi chạy ngay trong trình duyệt của bạn, nên JSON không bị tải lên hay lưu ở đâu cả.