GSon parsowanie JSON do obiektu klasy

0

Cześć
mam taki problem, mianowicie potrzebuję parsować takiego dżejsona

json.png

json2.png

Mam klasy:

public class ClassA {
    private int a;
    private int b;
    private List<ClassB> c;
    
    geters and setters...
}
public class ClassB {
    private String a;
    private double b;
    private double c;
    private int d;
    private int e;
    private int f;
    private String g;
    private String h;
    private String i;
    private String j;
    private int k;
    private String l;
    private String m;
    private String n;
    private int o;
    private int p;
    private String r;
    private int s;
    private String t;

   geters and setters...
}

Próbowałem załadować dane ze Stringa do listy ale nie działa. String był walidowany i jest poprawnym JSonem

String json = ...
...
Type listType = new TypeToken<ArrayList<ClassB>>(){}.getType();
List<ClassB> classB = new Gson().fromJson(json, listType);

wywala Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
domyślam się że spodziewa się tablicy ale w stringu z jsonem na pierwszym miejscu jest zwykłe pole

Nie wiem z której strony to "ugryźć"
mam jsona który ma zwykłe pola i pola jakiegoś typu które są rozwijane.
Może klasy powinny wyglądać inaczej?

W efekcie powinien powstać obiekt klasy ClassA z wypełnioną listą List<ClassB>

0
  1. W pliku json.png mamy pola ~"203462b", "2033ff23" - te klucze są stałe czy będą się zmieniać niedeterministyczny pomiędzy zapytaniami?
  2. Warto zapoznać się z http://www.jsonschema2pojo.org/ - dla jsona który jest deterministyczny można wygenerować POJO

String json = ...
...
Type listType = new TypeToken<ArrayList<ClassB>>(){}.getType();
List<ClassB> classB = new Gson().fromJson(json, listType);```

To powinno wyglądać (pisane z palca) tak:
ClassA classA = new Gson().fromJson(json, ClassA.class);

0
lubie_programowac napisał(a):
  1. W pliku json.png mamy pola ~"203462b", "2033ff23" - te klucze są stałe czy będą się zmieniać niedeterministyczny pomiędzy zapytaniami?
  2. Warto zapoznać się z http://www.jsonschema2pojo.org/ - dla jsona który jest deterministyczny można wygenerować POJO

String json = ...
...
Type listType = new TypeToken<ArrayList<ClassB>>(){}.getType();
List<ClassB> classB = new Gson().fromJson(json, listType);```

To powinno wyglądać (pisane z palca) tak:
ClassA classA = new Gson().fromJson(json, ClassA.class);

Dziękuje za odpowiedź. Właśnie w tym problem, że pola 203462b to identyfikatory i będą się zmieniały. Raz może być ich 1000 raz 479 raz 2 (w sumie każda dowolna ilość) a może też ich w ogóle nie być. Nie wiem czy to dobry pomysł ale załatwiłem to tak, że te elementy które nie będą się zmieniać ładuje do klasy tak jak napisałeś, a te pola ładuje parsując kod ręcznie, split'em indexOf substring itp itd i ustawiam setterami

1 użytkowników online, w tym zalogowanych: 0, gości: 1