分享

Gson中fromJson方法的返回值

 流浪的星星318 2017-03-25

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对象后,进行一次验证。

当然好处也是大大的。比如可以将一次从服务器获取的数据转换成不同的对象,展示在不同的地方。所以,应该是利大于弊。

举例:

  1. import com.google.gson.Gson;  
  2.   
  3. public class TestJson  
  4. {  
  5.     private int age;  
  6.     private String name;  
  7.   
  8.     public String show()  
  9.     {  
  10.         return new String("name:" + name + "/age:" + age);  
  11.     }  
  12.   
  13.     public static void main(String[] args)  
  14.     {  
  15.         String[] source =new String[]{  
  16.                 "",  
  17.                 "abc",  
  18.                 "{}",  
  19.                 "{\"nick_name\":\"Jack\"}",  
  20.                 "{\"name\":\"Anna\",\"id\":5}",  
  21.                 "{\"name\":\"Pluto\",\"age\":15,\"id\":10}"  
  22.         };  
  23.           
  24.         Gson g=new Gson();  
  25.         TestJson x=null;  
  26.         StringBuffer info=null;  
  27.         for(int i=0;i<source.length;i++)  
  28.         {  
  29.             info=new StringBuffer();  
  30.             info.append(i).append(":").append(source[i]).append("\n\t");  
  31.             try  
  32.             {  
  33.                 x=g.fromJson(source[i], TestJson.class);  
  34.                 info.append((x == null) ? "NULL" : x.show());  
  35.             }catch(Exception e)  
  36.             {  
  37.                 info.append(e.getClass().getName());  
  38.             }  
  39.             System.out.println(info.toString());  
  40.         }  
  41.     }  
  42. }  


运行的结果是:

  1. 0:  
  2.     NULL  
  3. 1:abc  
  4.     com.google.gson.JsonSyntaxException  
  5. 2:{}  
  6.     name:null/age:0  
  7. 3:{"nick_name":"Jack"}  
  8.     name:null/age:0  
  9. 4:{"name":"Anna","id":5}  
  10.     name:Anna/age:0  
  11. 5:{"name":"Pluto","age":15,"id":10}  
  12.     name:Pluto/age:15  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多