Gson是google的一個(gè)Json庫,使用非常簡單。在Java中,只要引入包,創(chuàng)建對象就可以用了。
fromJson是Gson提供的一個(gè)方法。用來將一個(gè)Json數(shù)據(jù)轉(zhuǎn)換為對象。調(diào)用方法是:new Gson().fromJson(Json_string,class)
需要注意的是,它會“盡量”轉(zhuǎn)換出對象,哪怕得到的對象從數(shù)據(jù)上看是不完整的。
這樣,可以通過一個(gè)Json數(shù)據(jù)轉(zhuǎn)換出多種類型的對象,完全看使用者的需求。當(dāng)用XSLT格式化XML文件時(shí)也是這種思路。
需要注意的是,在調(diào)用fromJson時(shí),參數(shù)Json_string的情況決定了返回值的情況:null、對象還是拋出異常
- 長度為0或者是null,那么返回結(jié)果是null;
- 非空,但不符合Json格式,比如“abc”,會拋出異常;
- 非空,則會返回一個(gè)非null的對象,無法獲得值的成員變量使用缺省值,這就是上面的”盡量“的意思。當(dāng)然,這種情況下,也有可能得到一個(gè)所有成員變量均為缺省值的對象;
再說下這個(gè)”盡量“??雌饋硎怯懈弊饔玫摹1热缭紨?shù)據(jù)完全提供錯(cuò)了,通過fromJson也能得到一個(gè)對象實(shí)體。而這種實(shí)體可能是不可用的。所以,基本上需要自己增加對象可用性驗(yàn)證代碼,在通過fromJson獲得了非null對象后,進(jìn)行一次驗(yàn)證。
當(dāng)然好處也是大大的。比如可以將一次從服務(wù)器獲取的數(shù)據(jù)轉(zhuǎn)換成不同的對象,展示在不同的地方。所以,應(yīng)該是利大于弊。
舉例:
- import com.google.gson.Gson;
-
- public class TestJson
- {
- private int age;
- private String name;
-
- public String show()
- {
- return new String("name:" + name + "/age:" + age);
- }
-
- public static void main(String[] args)
- {
- String[] source =new String[]{
- "",
- "abc",
- "{}",
- "{\"nick_name\":\"Jack\"}",
- "{\"name\":\"Anna\",\"id\":5}",
- "{\"name\":\"Pluto\",\"age\":15,\"id\":10}"
- };
-
- Gson g=new Gson();
- TestJson x=null;
- StringBuffer info=null;
- for(int i=0;i<source.length;i++)
- {
- info=new StringBuffer();
- info.append(i).append(":").append(source[i]).append("\n\t");
- try
- {
- x=g.fromJson(source[i], TestJson.class);
- info.append((x == null) ? "NULL" : x.show());
- }catch(Exception e)
- {
- info.append(e.getClass().getName());
- }
- System.out.println(info.toString());
- }
- }
- }
運(yùn)行的結(jié)果是:
- 0:
- NULL
- 1:abc
- com.google.gson.JsonSyntaxException
- 2:{}
- name:null/age:0
- 3:{"nick_name":"Jack"}
- name:null/age:0
- 4:{"name":"Anna","id":5}
- name:Anna/age:0
- 5:{"name":"Pluto","age":15,"id":10}
- name:Pluto/age:15
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。