Gson是google的一个Json库,使用非常简单。在Java中,只要引入包,创建对象就可以用了。
fromJson是Gson提供的一个方法。用来将一个Json数据转换为对象。调用方法是:new Gson().fromJson(Json_string,class)
需要注意的是,它会“尽量”转换出对象,哪怕得到的对象从数据上看是不完整的。
这样,可以通过一个Json数据转换出多种类型的对象,完全看使用者的需求。当用XSLT格式化XML文件时也是这种思路。
需要注意的是,在调用fromJson时,参数Json_string的情况决定了返回值的情况:null、对象还是抛出异常
- 长度为0或者是null,那么返回结果是null;
- 非空,但不符合Json格式,比如“abc”,会抛出异常;
- 非空,则会返回一个非null的对象,无法获得值的成员变量使用缺省值,这就是上面的”尽量“的意思。当然,这种情况下,也有可能得到一个所有成员变量均为缺省值的对象;
再说下这个”尽量“。看起来是有副作用的。比如原始数据完全提供错了,通过fromJson也能得到一个对象实体。而这种实体可能是不可用的。所以,基本上需要自己增加对象可用性验证代码,在通过fromJson获得了非null对象后,进行一次验证。
当然好处也是大大的。比如可以将一次从服务器获取的数据转换成不同的对象,展示在不同的地方。所以,应该是利大于弊。
举例:
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());
}
}
}
运行的结果是:
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