[英]Simple Json to Java convertion using GSON
我最近開始使用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; }
}
問題是,它正在對象中查找一個名為“ A”的字段,但是卻在查找“名稱”,“ value1”和“ value2”字段。
您要發送給gson的json是:
{"name":"qwrety","value1":1,"value2":2}
更改后,您的字段名稱仍為“ a”,但JSON使用“ A”。 因此,您需要重命名字段,或添加注釋以指示JSON使用“ A”作為名稱(我認為@SerializedName(“ A”))。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.