我最近開始使用GSON庫來反序列化來自web服務的JSON,但我無法使其工作。我決定在一些簡單的輸入上測試GSON - 不能使它更簡單,但它仍然不起作用。我查看了類似的問題,例如Converting JSON to Java,所有這些都提供了類似的解決方案。我的猜測是我錯過了一些非常簡單明顯的東西,因此對代碼的全新觀點可能會有所幫助。 因此,這裏是我:簡單的Json到使用GSON的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; }
}
,改變了deserialisation調用以下
Gson gson = new Gson();
Container obj = gson.fromJson(json, Container.class);
System.out.println(obj.getA());
不過,我反正得「空」打印出來
謝謝,您是對的,將json改爲您建議的作品,但正如我所說的,我從Web服務獲取json,所以我無法真正改變它的格式。你的回答給了我一個想法來引入新的課程 - > class Container {a} public A getA(){return a; } public void setA(A a){this.a = a; } } 並反序列化它 - > Container obj = gson.fromJson(json,Container.class); 但是,當我打印obj.getA()我仍然得到空 – IvanR 2011-02-13 00:17:52