我最近开始使用GSON库对来自Web服务的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”
我认为您的问题是您的JSON字符串。
尝试更改:
{"A":{"name":"qwrety","value1":1,"value2":2}}
至:
{"name":"qwrety","value1":1,"value2":2}
编辑:我认为问题可能是您的JSON字符串具有“ A”,并且区分大小写。尝试将您的成员变量更改为大写的“ A”。抱歉,我目前无法测试以确认这一点。
如果JSON格式是固定的,请尝试将您的类更改为类似的内容:
class Foo {
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);
}
}
和:
class Container {
private Foo A;
public Foo getA() { return A; }
public void setA(Foo A) { this.A = A; }
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句