我最近开始使用GSON库对来自Web服务的JSON进行反序列化,但我无法让它工作。我决定在一些简单的输入上测试GSON - 它再简单不过了,但仍然无法运行。我查看了类似于将JSON转换为Java的问题,所有这些问题都建议采用类似的解决方法。我猜我可能错过了非常简单和明显的东西,所以对代码进行全新的审视可能会有所帮助。
以下是我的内容:
我得到的回报是:
然而,我仍然打印出了“null”。
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
有人能指出这段代码哪里出了问题吗?
更新 正如@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”。
class Container { private A a; public A getA() { return a; } public void setA(A a) { this.a = a; } }
并进行反序列化->Container obj = gson.fromJson(json, Container.class);但是当我打印obj.getA()时,仍然得到null - IvanR