Я недавно начал использовать библиотеку GSON для десериализации JSON, которая поступает из веб-сервиса, но я не могу заставить его работать.Я решил проверить GSON на каком-то простом входе - не могу сделать его проще и все равно не работает.Я просматривал похожие проблемы, такие как Преобразование JSON в Java , и все они предлагают сходный подход к решению.Я предполагаю, что мне не хватает чего-то действительно простого и очевидного, поэтому, возможно, поможет новый взгляд на код.Итак, вот что у меня есть:
JSON
{"A":{"name":"qwrety","value1":1,"value2":2}}
Java класс
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
String json = /*getting JSON from server*/
Gson gson = new Gson();
A obj = gson.fromJson(json, A.class);
System.out.println(obj);
}
}
class A {
private String name;
private int value1;
private int value2;
public String getName() { return name; }
public int getValue1() { return value1; }
public int getValue2() { return value2; }
public void setName(String name) { this.name = name; }
public void setValue1(int value1) { this.value1 = value1; }
public void setValue2(int value2) { this.value2 = value2; }
public String toString() {
return String.format("name: %s, value1: %d, value2: %d", name, value1, value2);
}
}
Что я получаю взамен
name: null, value1: 0, value2: 0
Любойможете сказать, что не так с этим кодом?
UPD Как отметили @torbinsky и @ Kevin-Dolan, проблема заключалась в том, что структура классов Java не соответствовала формату Json.Чтобы исправить это, я добавил новый класс
class Container {
private A a;
public A getA() { return a; }
public void setA(A a) { this.a = a; }
}
и изменил вызов десериализации на следующий
Gson gson = new Gson();
Container obj = gson.fromJson(json, Container.class);
System.out.println(obj.getA());
Однако я все равно получаю "null" распечатанный