Otrzymuję dość głęboki ciąg obiektu JSON z usługi, który muszę przeanalizować do obiektu JSON, a następnie zmapować go na klasy.
Jak mogę przekształcić ciąg JSON w obiekt w Kotlin?
Po tym mapowaniu do odpowiednich klas używałem StdDeserializer firmy Jackson. Problem pojawia się w momencie, gdy obiekt miał właściwości, które również musiały zostać zdeserializowane na klasy. Nie byłem w stanie uzyskać mapowania obiektów, przynajmniej nie wiedziałem jak, wewnątrz innego deserializatora.
Z góry dziękuję za pomoc. Najlepiej, natywnie, staram się zmniejszyć liczbę potrzebnych zależności, więc jeśli odpowiedź dotyczy tylko manipulacji JSON i analizowania, wystarczy.
Odpowiedzi:
Możesz użyć tej biblioteki https://github.com/cbeust/klaxon
Klaxon to lekka biblioteka do analizowania JSON w Kotlin.
źródło
Nie ma wątpliwości, że przyszłość parsowania w Kotlinie będzie z kotlinx.serialization. Jest częścią bibliotek Kotlin. Jest jeszcze w momencie pisania na etapie inkubatora.
https://github.com/Kotlin/kotlinx.serialization
źródło
Json
(jest to powszechne). Ponadto istnieje kilka otwartych problemów z etykietą błędu na Githubie. Powiedziałbym, że nadal jest to ryzykowne w użyciu w produkcji (chyba że chcesz spędzić czas na naprawianiu potencjalnych problemów i nie planujesz często go aktualizować). Projekt jest rzeczywiście interesujący, szczególnie w przypadku projektów Kotlin Multiplatform, ale nie jest jeszcze stabilny.Bez biblioteki zewnętrznej (na Androida)
Aby przeanalizować to:
Użyj tych klas:
Stosowanie:
źródło
JsonObject
przydałoby się, jeśli Twoja maszyna JVM działa w środowisku Java7 ( docs.oracle.com/javaee/7/api/javax/json/JsonObject.html )?Możesz użyć
Gson
.Przykład
Krok 1
Dodaj kompilację
Krok 2
Konwertuj json na
Kotlin Bean
(użyj JsonToKotlinClass )Lubię to
Json
daneKotlin Bean
Krok 3
Posługiwać się
Gson
źródło
{
lub[
val
Nieruchomość może być łatwonull
, jeśli brakuje z JSON. Ponadto wartości domyślne nie są w ogóle używane.Nie jestem pewien, czy tego potrzebujesz, ale tak to zrobiłem.
Korzystanie z importu org.json.JSONObject:
Oto próbka pliku json:
{"Foods": [{"FoodName": "Jabłka", "Waga": "110"}]}
źródło
data class SomeClass(val param1: Int, val param2: Int)
.for (i in 0 until foodJson!!.length()) {
zamiastfor (i in 0..foodJson!!.length() - 1) {
. Robi to samo i jest bardziej wizualnyOsobiście używam modułu Jacksona dla Kotlin, który można znaleźć tutaj: jackson-module-kotlin .
Jako przykład, oto kod do parsowania JSON drzewa umiejętności Path of Exile, które jest dość ciężkie (84 tys. Wierszy po sformatowaniu):
Kod Kotlin:
JSON (niesformatowany): http://filebin.ca/3B3reNQf3KXJ/rawSkilltree.json
Biorąc pod uwagę twój opis, uważam, że pasuje do twoich potrzeb.
źródło
Aby przekonwertować JSON na Kotlin, użyj http://www.json2kotlin.com/
Możesz także użyć wtyczki Android Studio. Plik> Ustawienia, wybierz
Plugins
w drzewie po lewej stronie, naciśnij "Przeglądaj repozytoria ...", wyszukaj " JsonToKotlinClass ", zaznacz go i kliknij zielony przycisk "Zainstaluj".Po restarcie AS możesz go używać. Możesz utworzyć klasę za pomocą
File > New > JSON To Kotlin Class (JsonToKotlinClass)
. Innym sposobem jest naciśnięcie Alt + K.Następnie zobaczysz okno dialogowe do wklejenia JSON.
W 2018 roku musiałem dodać
package com.my.package_name
na początku zajęć.źródło
Po pierwsze.
Możesz użyć wtyczki konwertera klas danych JSON na Kotlin w Android Studio do mapowania JSON na klasy POJO (klasa danych kotlin). Ta wtyczka doda adnotacje do klasy danych Kotlin zgodnie z JSON.
Następnie możesz użyć konwertera GSON do konwersji JSON na Kotlin.
Postępuj zgodnie z tym pełnym samouczkiem: Samouczek parsowania Kotlin Android JSON
Jeśli chcesz przeanalizować json ręcznie.
Kod do przeanalizowania powyżej tablicy JSON i jej obiektu o indeksie 0.
źródło
http://www.jsonschema2pojo.org/ Cześć, możesz użyć tej witryny do konwersji json na pojo.
Ctrl + Alt + Shift + K
Następnie możesz ręcznie przekonwertować tę klasę modelu na klasę modelu kotlin. za pomocą powyższego skrótu.
źródło
Trochę późno, ale nieważne.
Jeśli wolisz parsować JSON od konstrukcji takich jak JavaScript wykorzystujących semantykę Kotlina, polecam JSONKraken , którego jestem autorem.
Sugestie i opinie w tej sprawie są wysoko cenione!
źródło
Pobierz źródło deme stąd ( parsowanie Json w systemie Android Kotlin )
Dodaj tę zależność:
Funkcja Call API:
źródło