`

Gson用法补遗

阅读更多
  本文小结基本用法和一些值得关注的gson用法
1 基本用法
   假设有对象pojo,如下:
 
public class ModelObject {
  String name;
  int val;
  boolean status;
  double f;
  
  public ModelObject(String name, int val, 
  boolean status, double f) {
    super();
    this.name = name;
    this.val = val;
    this.status = status;
    this.f = f;
  }
  
  @Override
  public String toString() {
    return "ModelObject [name=" + name + ",
    val=" + val + ", status="
    + status + ", f=" + f + "]";
  }


    然后是转换为JSON以及对JSON的反向转换:

final Gson gson = new Gson();

ModelObject modelObject = new ModelObject("myname", 12, true, 2.3);
System.out.println("toJson ---");
System.out.println("Original Java object : " + modelObject);

String json = gson.toJson(modelObject);
System.out.println("Converted JSON string is : " + json);
 
System.out.println("fromJson----");

System.out.println("Original JSON string is : " + json);

ModelObject modelObject1 = gson.fromJson(json, ModelObject.class);
System.out.println("Converted Java object : " + modelObject1);



  输出:
toJson ---
Original Java object : ModelObject [name=myname, val=12, status=true, f=2.3]
Converted JSON string is : {"name":"myname","val":12,"status":true,"f":2.3}
fromJson----
Original JSON string is : {"name":"myname","val":12,"status":true,"f":2.3}
Converted Java object : ModelObject [name=myname, val=12, status=true, f=2.3]

2) 如果是对于泛型的
 
  则要使用:
  Type collectionType =new TypeToken<{ generic-object-with-type-information }>(){}.getType();
  
比如:
  
public class GenericModel<T> {
  T value;
  
  public GenericModel(T value) {
    super();
    this.value = value;
  }
  
  @Override
  public String toString() {
    return "Model2 [value=" + value + "]";
  }
}


 
 
  使用方法:
 
Gson gson = new Gson();
 
System.out.println("A generic object demo");

GenericModel<Integer> model = new GenericModel<>(12);
 

String json = gson.toJson(model);
System.out.println("json representation :" + json);
 

Type collectionType = new TypeToken<GenericModel<Integer>>() {
}.getType();
GenericModel<Integer> modelObj = 
                  gson.fromJson(json, collectionType);
System.out.println("converted object representation: " + modelObj);
 
System.out.println("\nA object from collection framework\n");

List<String> listOfString = new ArrayList<>();
listOfString.add("ajduke");
listOfString.add("ajduchess");
 

String jsonStr = gson.toJson(listOfString);
System.out.println("json representation :" + jsonStr);
 
Type collectionType2 = new TypeToken<List<String>>() {
}.getType();
List<String> listObj = gson.fromJson(jsonStr, collectionType2);
System.out.println("converted object representation: " + listObj);




3 如果不希望有某些属性,则使用transient屏蔽,如:

    transient int val;

4 介绍一下如何输出漂亮的json格式,因为默认的输出是compact格式,就是比如:
  {"name":"ajduke","languagesKnown":["Java","Scala","Ruby"]}

  可以使用如下的方式输出漂亮格式的:
 

GsonBuilder gsonBuilder = new GsonBuilder();
Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
json = prettyGson.toJson(new Developer());


   就是setPrettyPrinting选项了,输出的格式为:
   ******* Pretty formatting *********
{
  "name": "ajduke",
  "languagesKnown": [
    "Java",
    "Scala",
    "Ruby"
  ]
}
 
5 把null值也转换,默认是不转换null值的,可以选择也转换,比如
  
class Developer {
 
  private String name;
  private String classz;
  List<String> languagesKnown;
  
  public Developer() {
    name = "ajduke";
 
    languagesKnown = new ArrayList<>();
    languagesKnown.add("Java");
    languagesKnown.add("Scala");
    languagesKnown.add("Ruby");
  }
}


   则:
Gson gson = new Gson();
 
System.out.println("Default behaviour ");
GsonBuilder gsonBuilder = new GsonBuilder();
 
Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
String json = prettyGson.toJson(new Developer());
System.out.println(json);
 
System.out.println("Including the nulls ");
Gson includeNullsGson = gsonBuilder.serializeNulls().create();
String json2 = includeNullsGson.toJson(new Developer());
System.out.println(json2);



  输出:
Default behaviour
{
  "name": "ajduke",
  "languagesKnown": [
    "Java",
    "Scala",
    "Ruby"
  ]
}
Including the nulls
{
  "name": "ajduke",
  "classz": null,
  "languagesKnown": [
    "Java",
    "Scala",
    "Ruby"
  ]
}

6 输出的json使用另外一个名字,默认转换出来的json中和对象的字段是一样的,当然也
可以设置成不同,使用注解
   @SerializedName("firstName")
  private String name;
则指定了别名

7 可以输出到流
  
 Gson gson = new Gson();
  System.out.println("Writing JSON to file ....");

  try (FileWriter writer = new FileWriter("d:/output.json")) { 
    gson.toJson(new Developer(), writer); // writing to file
  }
  



8 使用@Since注解去维护版本,比如你有一个REST的API,并且有多个版本的JSON,如果下一个版本JSON中增加了字段,但又不希望所有的版本都在使用这些字段的话,就可以使用,比如:
 
public class Example33 {
  public static void main(String[] args) {
    Gson gson = new GsonBuilder().setVersion(2.0).create();
    String json = gson.toJson(new ExampleClass());
    System.out.println("Output for version 2.0...");
    System.out.println(json);
    
    gson= new GsonBuilder().setVersion(1.0).create();
    json = gson.toJson(new ExampleClass());
    System.out.println("\nOutput for version 1.0...");
    System.out.println(json);
    
    gson= new Gson();
    json = gson.toJson(new ExampleClass());
    System.out.println("\nOutput for No version set...");
    System.out.println(json);
  }
}
 
class ExampleClass{
  String field=  "field";
  // this is in version 1.0
  @Since(1.0) String newField1 = "field 1";
  // following will be included in the version 1.1
  @Since(2.0) String newField2 = "field 2";
}



输出为:
Output for version 2.0...
{"field":"field","newField1":"field 1","newField2":"field 2"}

Output for version 1.0...
{"field":"field","newField1":"field 1"}

Output for No version set...
{"field":"field","newField1":"field 1","newField2":"field 2"}

9 HTML的转换
   默认是GSON把HTML 转义的,但也可以设置不转义,比如:
public class Example34 {
  public static void main(String[] args) {
    String str ="<myval>";
    Gson gson = new Gson();
    System.out.println("Normal behaviour...");
    System.out.println(gson.toJson(str));
    
    System.out.println("\nDisabled html escaping...");
    gson = new GsonBuilder().disableHtmlEscaping().create();
    System.out.println(gson.toJson(str));
  }
}


输出:
  Normal behaviour...
"\u003cmyval\u003e"

Disabled html escaping...
"<myval>"


10 指定某些修饰符,比如private等不输出为json,比如:
  GsonBuilder excludeFieldsWithModifiers = gsonBuilder
    .excludeFieldsWithModifiers(Modifier.PRIVATE);

Gson create = excludeFieldsWithModifiers.create();
String json2 = create.toJson(new Developer());

   当然也可以将要输出字段用@Expose去注解输出:

11甚至可以指定将原来对象的字段,输出成什么样的JSON,比如全部转换为小写,并用空格或者下划线分隔
  比如:
 
public static void main(String[] args) {
    
    Gson gson = new Gson();
    String json = gson.toJson(new JsonClass());
    System.out.println("Default behaviour....");
    System.out.println(json);
    
    gson = new GsonBuilder().setFieldNamingPolicy(
    FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
    json = gson.toJson(new JsonClass());
    System.out.println("\nFields with lower case with dashes...");
    System.out.println(json);
    
    gson = new GsonBuilder().setFieldNamingPolicy(
    FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES).create();
    json = gson.toJson(new JsonClass());
    System.out.println("\nFields with upper case with spaces...");
    System.out.println(json);
    
  }
}
 
class JsonClass {
  String myField = "value1";
  String myAnotherField = "value2";
}


  输出:
Default behaviour....
{"myField":"value1","myAnotherField":"value2"}

Fields with lower case and dashes...
{"my-field":"value1","my-another-field":"value2"}

Fields with lower case and dashes...
{"My Field":"value1","My Another Field":"value2"}
4
1
分享到:
评论

相关推荐

    ORM+Volley+Gson用法

    本文件集成orm数据库、volley网络下载以及gson解析,用起来非常方便

    fastJson和gson的用法

    fastJson和gson的用法,解析最常用的是 json ,fastjson第三方库http://fastjson.codeplex.com/ http://www.json.org/

    GSON JAR包 最新包和历史包 gson-2.10.1

    介绍:Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. 压缩包里有以下文件: ...

    Java JSON处理库之Gson的用法详解.rar

    Java JSON处理库之Gson的用法详解.rar

    om.google.gson.Gson Gson maven依赖

    om.google.code.gson/gson/2.6.2 Gson maven依赖 java 开发包

    浅析在Android系统中JSON和GSON的用法.pdf

    浅析在Android系统中JSON和GSON的用法.pdf

    gson 2.7 用于转换Java对象和Json对象

    gson2.7 下载即可使用 GSON是Google开发的Java API,用于转换Java对象和Json对象

    gson jar包下载

    gson jar包 gson jar包下载 gson jar包下载 gson jar包下载

    gson-2.8.0-API文档-中文版.zip

    赠送jar包:gson-2.8.0.jar; 赠送原API文档:gson-2.8.0-javadoc.jar; 赠送源代码:gson-2.8.0-sources.jar; 赠送Maven依赖信息文件:gson-2.8.0.pom; 包含翻译后的API文档:gson-2.8.0-javadoc-API文档-中文...

    googleGson JsonObject json转换包

    包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...

    com.google.gson.Gson.jar

    json我们在网络请求中经常用到,最近最火的微信小程序开发中... 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码解决您的问题。

    com.google.gson.Gson 2.8.1 2.8.2 jar包 gson

    com.google.gson.Gson 2.8.1 2.8.2 jar包 gson,直接解压到maven仓库,或者提取里面的jar包都可以使用

    gson-2.8.5版本的jar包

    GSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串...

    gson 使用Gson将Java对象转换为JSON

    Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。 Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) from...

    Gson的基本用法

    使用Gson的jar包进行数据格式的转换,包括单个对象,对象集合,map等等

    gson-2.8.7-API文档-中文版.zip

    赠送jar包:gson-2.8.7.jar; 赠送原API文档:gson-2.8.7-javadoc.jar; 赠送源代码:gson-2.8.7-sources.jar; 赠送Maven依赖信息文件:gson-2.8.7.pom; 包含翻译后的API文档:gson-2.8.7-javadoc-API文档-中文...

    com.google.gson.Gson 2.8.5 jar包

    截止至2018-11-27,github上com.google.gson.Gson 最新的2.8.5jar包。强大的json字符串解析功能及将字符串转换为json格式。我16年上传的免费下载的2.8.0版本不知道为什么变成下载需要50分了

    gson-2.8.9-API文档-中文版.zip

    赠送jar包:gson-2.8.9.jar; 赠送原API文档:gson-2.8.9-javadoc.jar; 赠送源代码:gson-2.8.9-sources.jar; 赠送Maven依赖信息文件:gson-2.8.9.pom; 包含翻译后的API文档:gson-2.8.9-javadoc-API文档-中文...

    com.google.gson.Gson 2.8.0 jar包

    截止至2016-12-23,github上com.google.gson.Gson 最新的2.8.0jar包。强大的json字符串解析功能及将字符串转换为json格式。才发现需要这么多分,大家也可以去网盘下载: ...

    GSON完整jar包(jar、doc、source)

    GSON完整包,包含三个jar包。 gson-2.2.4.jar GSON生成解析json数据的基本jar包; gson-2.2.4-javadoc.jar GSON API介绍文档包; gson-2.2.4-sources.jar GSON源码包。 下载一个玩玩吧!

Global site tag (gtag.js) - Google Analytics