`

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用法"可能包含了集成这三个库的示例代码、配置文件、README文档等资源,帮助开发者理解和学习如何在Android项目中有效地结合使用ORM、Volley和Gson。通过研究这些示例,开发者可以...

    fastJson和gson的用法

    JSON(JavaScript Object Notation)是一种轻...无论选择哪个库,理解其基本用法和核心特性,都能帮助我们在实际开发中更高效地处理JSON数据。同时,了解不同库的优势和适用场景,有助于我们做出最适合项目需求的选择。

    om.google.gson.Gson Gson maven依赖

    Gson是Google开发的一款Java语言编写的库,用于在Java对象和JSON数据之间进行映射。这个库使得Java对象可以轻松地序列化成JSON格式,同时也可以从JSON字符串反序列化回Java对象。在Java开发中,Gson库非常常见,特别...

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

    Gson库是由Google提供的一个Java库,其主要功能是帮助开发者在Java对象和JSON数据之间进行相互转换。...这就是Gson 2.7在实际开发中的基本用法。当然,根据实际需求,你可以进一步定制和扩展Gson的功能。

    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

    三、基本用法 1. 对象转JSON字符串 要将Java对象转换为JSON字符串,可以使用Gson实例的`toJson()`方法: ```java Person person = new Person("张三", 30); Gson gson = new Gson(); String jsonString = gson.to...

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

    Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。它的全称是Google Gson,主要用于将Java对象转换为JSON格式的字符串,也可以将JSON字符串反序列化为对应的Java对象。在Java开发中,...

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

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

    gson jar包下载

    Gson,全称为Google Simple JSON,是Google提供的一款开源库,用于在Java对象和JSON数据之间进行映射。这个库使得Java开发者能够轻松地将JSON字符串转换为等效的Java对象,反之亦然。在Java应用程序中,Gson库特别...

    Gson基本用法

    在了解Gson的基本用法前,先来理解一下JSON(JavaScript Object Notation)是什么。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,采用完全独立于语言...

    gson-2.8.5版本的jar包

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

    gson-2.2.4.jar下载

    Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。...通过理解和掌握Gson的基本用法和高级特性,开发者可以更高效地处理数据序列化和反序列化任务,提升项目的可维护性和可扩展性。

    gson-2.8.6.jar

    在这个例子中,`Person`类的实例被转换为JSON字符串,然后又从JSON字符串中解析回来,展示了Gson的基本用法。 总之,Gson-2.8.6.jar作为Java开发中的一个重要工具,为JSON操作提供了极大的便利,无论是简单的数据...

    gson 需要的jar

    在本篇文章中,我们将深入探讨Gson库的基本用法、核心概念以及如何在项目中引入Gson库所需的jar文件。 首先,我们来了解什么是JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和...

    googleGson JsonObject json转换包

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

    Java中Gson的使用详解

    下面将对Gson的基本用法和属性重命名进行详细介绍。 一、Gson的基本用法 Gson提供了fromJson()和toJson()两个方法,用于实现反序列化和序列化。fromJson()方法用于将JSON字符串反序列化为Java对象,而toJson()方法...

    Gson-2.8.1的官方jar包合集【gson-2.8.1.jar,gson-2.8.1-sources.jar】

    Gson是Google开发的一款强大的Java库,用于将Java对象转换为JSON格式的字符串,以及将JSON数据解析回等效的Java对象。这个压缩包包含了Gson库的版本2.8.1,它提供了两个主要的组件:`gson-2.8.1.jar`和`gson-2.8.1-...

    Gson简要使用笔记

    Gson 是 Google 推出的一款 Java 语言编写的 JSON 库,它允许开发者将 Java 对象转换成 JSON 格式的字符串,反之亦然。...通过掌握 Gson 的基本用法和注解机制,开发者可以高效地在 JSON 和 Java 类之间进行数据交换。

    json解析 gson fastjson

    使用Gson,你可以通过`Gson().toJson()`方法将Java对象转化为JSON字符串,通过`new Gson().fromJson()`方法将JSON字符串反序列化为Java对象。 例如: ```java Person person = new Person("John", "Doe"); String ...

    Gson的2.2.4jar

    Gson是Google推出的一款强大的Java库,主要用于在Java对象与JSON数据之间进行相互转换。它的全称是Google Simple JSON,自2008年发布以来,已经成为了Java开发者处理JSON数据的一个常用工具,尤其是在Android开发中...

Global site tag (gtag.js) - Google Analytics