JSON na klasę Java
Wklej przykładowy JSON, a generator utworzy jedną lub więcej klas Java z właściwymi typami pól, getterami, setterami oraz anotacjami biblioteki JSON. Obsługuje Jackson (@JsonProperty), Gson (@SerializedName) i Lombok (@Data/@Builder) dla czystszego kodu. Obiekty zagnieżdżone stają się klasami wewnętrznymi lub klasami rodzeństwa, zależnie od wybranego układu.
Jak przekonwertować JSON na Java
-
1
Wklej JSON
Wystarczy jedna próbka; wiele próbek poprawia wykrywanie, czy pole może przyjmować wartość null.
-
2
Wybierz bibliotekę
Jackson (najczęstszy w Spring), Gson (dla Androida i niektórych starszych projektów) lub zwykłe POJO bez anotacji.
-
3
Wybierz opcje dodatkowe
Lombok do automatycznego generowania getterów/setterów, wzorca builder oraz equals/hashCode. Albo zostaw kod prosty.
-
4
Wybierz styl zagnieżdżenia
Klasy rodzeństwa w tym samym pliku (klasy publiczne w Java 17+ muszą być w osobnych plikach) lub zagnieżdżone klasy statyczne.
-
5
Skopiuj kod
Wklej go do swojego projektu. Nazwy klas odpowiadają kluczom JSON; pakiet jest ustawiany zgodnie z Twoją konfiguracją.
Przykładowe wyjście: Jackson + Lombok
Wejście:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
Wyjście:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("address")
private Address address;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@JsonProperty("city")
private String city;
}
Mapowanie typów
| JSON | Typ w Java |
|---|---|
| ciąg znaków | String |
| liczba całkowita (≤ Integer.MAX) | Integer / int |
| duża liczba całkowita | Long / BigInteger |
| liczba dziesiętna | Double / BigDecimal |
| wartość logiczna | Boolean / boolean |
| data ISO | LocalDate (Jackson JSR-310) |
| data i godzina ISO | Instant / OffsetDateTime |
| null (przy niepustym polu rodzeństwa) | Typ opakowujący (np. Integer) |
| tablica | List<T> |
| obiekt | klasa zagnieżdżona |
Wybór między typem opakowującym a prymitywnym
- Typ prymitywny (
int,long,boolean), nie może być null, wydajny, bez auto-boxingu. - Typ opakowujący (
Integer,Long,Boolean), może być null; wymagany, gdy pole może być nieobecne lub null w JSON.
Domyślnie generator stosuje typ opakowujący dla wszystkiego, co uznaje za mogące być null, a w pozostałych przypadkach typ prymitywny.
Jackson kontra Gson
| Funkcja | Jackson | Gson |
|---|---|---|
| Powszechność w Spring | Tak, domyślny | Nie (wymaga konfiguracji) |
| Wydajność | Szybszy | Wolniejszy |
| Obsługa dat JSR-310 | Przez dodatkowy moduł | Przez dodatkowy moduł |
| Polimorfizm | @JsonTypeInfo |
RuntimeTypeAdapter |
| Tolerancja końcowego przecinka | Nie (domyślnie) | Tak |
Częste błędy
- Używanie typów prymitywnych dla pól mogących być null.
intnie może być null; Jackson zgłosi błąd, jeśli JSON zawiera"age": null. UżyjInteger. - Brak modułów dat. Jackson wymaga
jackson-datatype-jsr310dlaInstant/LocalDate. Bez niego daty wracają doStringlub wartości long w formacie epoch. - Współdzielenie typów opakowujących między niepowiązanymi klasami. Jeśli dwie struktury JSON mają zagnieżdżony
Address, generator tworzy dwie klasyAddress. Zmień nazwy lub scal je ręcznie. - Pominięcie
@JsonIgnoreProperties(ignoreUnknown = true). Rygorystyczny Jackson zgłasza błąd przy nieznanych właściwościach; dodaj tę anotację (lub skonfiguruj ją globalnie), aby uzyskać tolerancyjną deserializację.
Najczęściej zadawane pytania
W większości przypadków Jackson, jest domyślny w Spring, szybszy i ma bogatszą obsługę polimorfizmu. Gson jest lżejszy i lepiej znany w Androidzie, choć projekty Androida coraz częściej korzystają z Moshi lub kotlinx.serialization.
Lombok usuwa wiele powtarzalnego kodu (gettery, settery, equals, hashCode, builder). Jest szeroko stosowany, ale wymaga procesora anotacji Lombok w procesie budowania. Wyłącz go, jeśli Twój projekt unika Lombok ze względu na higienę zależności.
Pola, które są null w którejkolwiek z obserwowanych próbek, stają się typami opakowującymi (Integer zamiast int), aby mogły przechowywać null. Jackson wtedy bezbłędnie deserializuje "age": null. Dodaj @JsonInclude(Include.NON_NULL), aby pomijać wartości null podczas serializacji.
Tak, jeśli wybierzesz „record“. Rekordy są zwięzłe, niezmienne i działają z Jackson 2.12+. W projektach opartych na Spring Boot 3 połączenie rekordów z generowaniem bez Lombok to nowoczesny wybór.
Powiązane narzędzia
Tabela ASCII
Pełna tabela ASCII od 0 do 127 z zapisem dziesiętnym, szesnastkowym, ósemkowym i binarnym oraz notacją numerycznych odwołań HTML, w tym kodami sterującymi NUL, LF i DEL.
Referencja znaków HTML
Przeszukiwalna lista encji HTML wraz z ich kodami nazwanymi i liczbowymi oraz kopiowaniem jednym kliknięciem specjalnych znaków i symboli.
Skróty klawiaturowe
Wyszukuj udokumentowane skróty domyślne VS Code, Chrome i Bash z GNU Readline w macOS, Windows i Linux.
Generator EditorConfig
Wygeneruj plik .editorconfig z własnymi regułami stylu i rozmiaru wcięć, końca linii, kodowania i białych znaków, aby uzyskać spójne formatowanie w różnych IDE i edytorach.
Walidator adresów e-mail
Zweryfikuj adres e-mail: sprawdzenie składni RFC 5322, sprawdzenie rekordu MX w czasie rzeczywistym oraz szczegóły dotyczące części lokalnej, domeny i długości. Żadna wiadomość nie jest wysyłana.
Formatowanie HTML
Formatuj HTML lokalnie w przeglądarce, używając wcięć dwóch lub czterech spacji. HTML nie jest wysyłany ani walidowany.
Narzędzie jest dostępne w innych językach
- JSON till Java-klass [SV]
- JSON إلى فئة Java [AR]
- JSON naar Java-klasse [NL]
- JSON เป็นคลาส Java [TH]
- JSON sang lớp Java [VI]
- JSON ke Kelas Java [ID]
- JSON a Clase Java [ES]
- JSON から Java クラスへ [JA]
- JSON을 Java 클래스로 [KO]
- JSON vers classe Java [FR]
- JSON zu Java-Klasse [DE]
- JSON para Classe Java [PT]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]
- JSON to Java Class [EN]
- JSON in classe Java [IT]