Kotlin : serializacja json stringu do Listy

Kotlin : serializacja json stringu do Listy
andrzej.kmicic
  • Rejestracja:prawie 12 lat
  • Ostatnio:8 miesięcy
  • Postów:96
0

Poproszę o przykład, link ... dopiero zacząłem przygodę z Kotlinem i Androidem i nie mogę znaleźć przykładu serializacji stringa do Listy w Kotlinie. Wszystkie przykłady oparte są na obiektach z nazwami pól nie mogę znaleźć przykładu z polem Array<AnyType>
przykład :

Kopiuj
{
    "database": [
    [277,277,"2018-11-01",11,12,18],
    [276,276,"2018-11-01",2,11,17],
    [275,275,"2018-10-31",5,11,16]
    ]
}

jak w Kotlinie zrobić listę jak dla przykładu zrobić to mozna w PHP? :

Kopiuj
<?php
$js =<<<EXAMPLE
{
    "database": [
    [277,277,"2018-11-01",11,12,18],
    [276,276,"2018-11-01",2,11,17],
    [275,275,"2018-10-31",5,11,16]
    ]
}
EXAMPLE;
echo print_r(json_decode($js,true),true);

i wynik z PHP :

Kopiuj
Array
(
    [database] => Array
        (
            [0] => Array
                (
                    [0] => 277
                    [1] => 277
                    [2] => 2018-11-01
                    [3] => 11
                    [4] => 12
                    [5] => 18
                )

            [1] => Array
                (
                    [0] => 276
                    [1] => 276
                    [2] => 2018-11-01
                    [3] => 2
                    [4] => 11
                    [5] => 17
                )

            [2] => Array
                (
                    [0] => 275
                    [1] => 275
                    [2] => 2018-10-31
                    [3] => 5
                    [4] => 11
                    [5] => 16
                )

        )

)
edytowany 1x, ostatnio: andrzej.kmicic
Michał Sikora
Michał Sikora
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Kraków
  • Postów:834
0

Przecież w przykładzie masz listę list. Wewnętrzne listy nawet nie są jednolite, bo mieszają String i Int, czyli w najlepszym przypadku masz taką klasę.

Kopiuj
class JakasClasa(val database: List<List<Any>>)

Jakby się uprzeć, to mógłbyś mieć String w miejscu Any, ale nie każda biblioteka na to pozwoli. Do deserializacji możesz skorzystać z czegokolwiek w zasadzie - Moshi, Jackson, GSON - popatrz na stronach tych bibliotek. Osobiście polecam Moshi, jeżeli tylko Android jest Ci potrzebny. Na Kotlina jest jeszcze "natywne" wbudowane wsparcie - https://github.com/Kotlin/kotlinx.serialization.

edytowany 3x, ostatnio: Michał Sikora
andrzej.kmicic
  • Rejestracja:prawie 12 lat
  • Ostatnio:8 miesięcy
  • Postów:96
0

Chciałoby się powiedzieć niezwyklem kontent i stokrotne dzięki waćpan Michale... :). Nie omieszkam spróbować ...

Rozwiązanie przyniósł przypadek, do pobrania danych REST użyłem biblioteki khttp i w niej znalazłem serializację JSON do tablicy JSONArray:

Kopiuj
var resp: Response  = get(urlN)
            var data: JSONArray = resp.jsonObject.getJSONArray("Data") // .getString("Data")
            println(data.get(0))
            println(data.length())
            println(data.getJSONArray(0).length())

edytowany 4x, ostatnio: andrzej.kmicic

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.