Json转换利器Gson—— List to Json

  Json一种非常常用的数据交换方式,又因为我们现在Web框架使用的Easyui(其中最常用的table表格绑定的Json数据),Json的应用就必不可少了,我们现在从后台数据库得到的数据常用的类型是实体和list,都属于集合,性质是一样的,从实体或者list转成Json数据传到界面就是最关键的了。

  其实Java中Json的解析方式有很多种,我们可以直接使用Java的JSONObject库,除此之外还有fastjson,Gson,jackson等等这些Json处理类库,共同之处不仅方便我们开发,转换效率也更快。

  今天我们先来看Gson——Google荣誉出品。

一、引入Jar包

  如果是maven项目的话,直接pom中引入即可,当然也可以直接引入Jar包。

<dependency>

 <groupId>com.google.code.gson</groupId>

  <artifactId>gson</artifactId>

  <version>2.3.1</version>

</dependency>

二、使用,以List to Json为例

  使用上很简单,最主要的三步:

//实例一个Gson

Gson gson = newGson();

//实例一个泛型的List(一般是从数据库查询返回)

List<Class> list = new ArrayList<Class>();

//调用转换方法toJson即可

String json = gson.toJson(list);

三、实际问题

  如果只想导出某个实体属性或者实体中有关联其他实体,我们并不想把关联实体(list中嵌套这list)也导出到Json,尤其是后一种情况比较常见,之前我们是从list中remove不相关的内容,但是我们实体变得时候,之前remove就不可控制了。再来看通过Gson如何处理这种情况。

1、首先是在实体属性上通过注解标识需要转换的属性

publicclass School{

  @Expose
  private String code;

  @Expose
  private String name;

  private String remark

  privateSet<Build> builds = new HashSet<Build>();

}

2、使用GsonBuilder

唯一不同于上面的是实例化的类是GsonBuilder,并且需要调用下面的方法:

Gson gson = newGsonBuilder() 

       .excludeFieldsWithoutExposeAnnotation() //<span style="font-family:SimSun;">只导出实体中</span>用@Expose注解的属性 

       .create();  

默认情况下@Expose注解是不起作用的,除非你用GsonBuilder创建Gson的时候调用了GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法。

注:如果仅仅是想把某些特定的字段包含在外和话,可以使用transient 关键字声明字段。

GsonBuilder常用的设置:

        Gson gson = new GsonBuilder()
        .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性
        .enableComplexMapKeySerialization() //支持Map的key为复杂对象的形式
        .serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//时间转化为特定格式
        .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.
        .setPrettyPrinting() //对json结果格式化.
        .setVersion(1.0)    //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.
                            //@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么
                            //@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.
        .create();

四、小结

  选择转换属性问题解决了,如果就想把关联的list转换成Json呢,下文再继续,继续结合业务测试,继续站在巨人的肩膀上。我们目前的问题肯定已经有了解决方案,待我们探索。

附一

李坤师哥:

http://blog.csdn.net/lk_blog/article/category/1172246?viewmode=list

附二

Google:

http://google-gson.googlecode.com/svn/tags/gson-2.3.1/docs/javadocs/com/google/gson/Gson.html

附三

性能测试:

json解析性能比较(gson与jackson)

网上测试有很多,普遍的反映出的是jackson对大数据量的装换性能更好(10倍以上),不过都不是现在的最新版本,后面自己来个新版本的测试。

时间: 2024-10-09 22:02:46

Json转换利器Gson—— List to Json的相关文章

从零开始学android开发-Json转换利器Gson之实例

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: http://code.google.com/p/google-gson/downloads/list 实体类: public class Student { private int id; private String name; private Date birthDay; public int

Json转换利器Gson之实例二-Gson注解和GsonBuilder

有时候我们不需要把实体的所有属性都导出,只想把一部分属性导出为Json. 有时候我们的实体类会随着版本的升级而修改. 有时候我们想对输出的json默认排好格式. ... ... 请看下面的例子吧: 实体类: [java] view plaincopy import java.util.Date; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public 

Json转换利器Gson之实例一-简单对象转化和带泛型的List转化

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: http://code.google.com/p/google-gson/downloads/list 实体类: [java] view plaincopy [java] view plaincopy public class Student { private int id; private Str

Json转换利器Gson之实例

描述 Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来 示例 import java.lang.reflect.Type; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import j

java util - json转换工具 gson

需要 gson-2.7.jar 包 package cn.java.gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class Test { public static void main(String[] args) { dataType(); dataObj(); dataArray(); } publi

json解析之gson

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象. Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象 对于泛型对象,使用fromJson(String, Type)方法来将Json对象转换成对应的泛型对象 new TypeToken<>(){}.getType()方法取得Typ

C# JSON转换以及编码转换

C# JSON转换以及编码转换 一.C# Json转换 首先需要下载安装Newtonsoft.Json.dll,下载地址 引用后再添加:using Newtonsoft.Json;using Newtonsoft.Json.Converters;即可使用. String转JSON String json=JsonConvert.SerializeObject(str); JSON转String String str=JsonConvert.DeserializeObject<String>(j

json转换成对象

在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在程序结束后会用警告显示出来,告知程序员那个key值没有被映射上 import net.sf.json.JSONObject; public class MainClass { public static void main(String[] args) { TestJsonBean(); } /**

乱码字符引起的JSON转换失败

这种问题有两个解决办法,使用后不管你是什么特殊字符还是什么西欧字体还是什么稀奇古怪的内容都可以完美解决! 1.要把即将转换为json的内容先转换为unicode编码,json转换无误后,使用json时,比如展示json里的内容,再将其转换为中文字符 2.这是个偏方法,使用过JSONObject lib 工具的都知道即使是一条乱码内容,依然可以存储到JSONObject里去.我看了它的存储源码,发现它是存储之前,将内容解释后再存储了.这样做得话,不管你什么,我先解释一遍再存储,可以避免存储时因特殊