Google GSON入门

在Java世界中,JSON已成为事实上的XML数据交换格式标准,因为它的易用性和传输效率高。

如果您不了解JSON,那就是Javascript对象表示法,这是一种基于文本的数据交换格式,是名称-值的集合,其中名称严格是字符串类型,值可以是int,布尔值,数组或其他json对象。

GSON是Google开发的开源Java库。 它是用于将Java对象与json表示形式转换的API。

为什么要使用它?

  • 将任何Java对象(即新对象或任何现有/旧版对象)转换为JSON,反之亦然。
  • 对通用对象的最佳支持
  • 简单方便的转换方法
  • 无需任何注释的字段进行转换
  • 默认情况下,所有字段(包括私有字段)都包含在转化中
  • 如果不想在转换中包含该字段,请对该字段使用瞬变修饰符
  • 它通过不将其包含在序列化输出中,而在反序列化期间将其初始化回null,从而优雅地处理null字段。

如何将其添加到项目中?

使用以下方法之一将其添加为依赖项

使用Maven

将以下依赖项添加到项目的pom.xml中

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.2.4</version>
</dependency>

使用Gradle

在项目的build.gradle中添加以下内容

repositories {
    mavenCentral()
}
 
dependencies {
    compile 'com.google.code.gson:gson:2.2.4'
}

用作非托管依赖项

如果不使用任何构建工具,则可以将gson jar添加到直接classpath或构建路径中。

从GSON项目的下载页面下载最新的jar。 下载的zip文件包含3个jar文件-二进制文件,源代码和javadoc。 抓取二进制jar文件并将其添加到您的项目类路径中。

如何使用它 ?

为了将对象与json相互转换,您需要使用Gson类及其以下2种方法。

toJson() =>将提供的对象转换为json字符串,将要转换的对象作为参数并返回json表示字符串

fromJSon() =>将json字符串转换为object,将第一个参数作为json字符串作为object和目标对象的类文字,并返回目标对象

您可以多次使用Gson实例/对象,因为它不会保持任何状态。

以下是一些说明GSON API用法的示例。

示例1:对于简单对象

考虑以下模型对象以进行转换,但是请记住,您可以转换任何对象

模型对象

package in.ajduke.ap012;
/**
* An model for gson demo 
* 
* @author ajduke
*/
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表示形式的清单,

Example1.java

final Gson gson = new Gson();
// original object instantiation
ModelObject modelObject = new ModelObject("myname", 12, true, 2.3);
System.out.println("toJson ---");
System.out.println("Original Java object : " + modelObject);
// converting an object to json object
String json = gson.toJson(modelObject);
System.out.println("Converted JSON string is : " + json);

System.out.println("fromJson----");
// getting object from json representation
System.out.println("Original JSON string is : " + json);
// converting json to object
ModelObject modelObject1 = gson.fromJson(json, ModelObject.class);
System.out.println("Converted Java object : " + modelObject1);

请注意fromJson()的签名,它使用第二个参数作为目标对象的类文字。

输出如下,

示例1-输出

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:对于通用对象

为了将通用对象从json表示形式转换回java对象,我们需要使用use extra对象,如下所示

类型collectionType = new TypeToken <{带类型信息的通用对象}>(){}。getType();

您需要向TypeToken类型参数信息提供目标类类型,如上所示。 这是形成Type实例,我们需要将它作为第二个参数传递给fromJson()方法。

以下清单显示了将通用类或类从集合框架转换为json或从json转换的示例

GenericModel.java

package in.ajduke.ap012;
/**
* An generified model for demo of gson conversion 
* @author ajduke
*/
public class GenericModel<T> {
  T value;
  
  public GenericModel(T value) {
    super();
    this.value = value;
  }
  
  @Override
  public String toString() {
    return "Model2 [value=" + value + "]";
  }
}

Example2.java

Gson gson = new Gson();

System.out.println("A generic object demo");
// a generified object
GenericModel<Integer> model = new GenericModel<>(12);

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

// converting back to object
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");
// for collection framework objects
List<String> listOfString = new ArrayList<>();
listOfString.add("ajduke");
listOfString.add("ajduchess");

// conversion to json
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);

输出如下

例2-输出

A generic object demo
json representation :{"value":12}
converted object representation: Model2 [value=12]
 
A object from collection framework
 
json representation :["ajduke","ajduchess"]
converted object representation: [ajduke, ajduchess]

示例3:使用瞬态

如果您不想在json表示形式中包含某些字段,则可以对变量声明使用transient修饰符,然后在将其转换为json表示形式时,GSON会忽略该变量。 但是,当从json字符串转换回对象时,它会根据变量类型初始化其默认值

考虑我们的ModelObject,让我们从json表示中跳过整数val,因此,将其声明修改为transient,如下面的清单所示

ModelObject2.java

package in.ajduke.ap012;
/**
* An model for demo of gson conversion 
* 
* @author ajduke
*/
public class ModelObject {
  String name;
  transient 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 + "]";
  }
}

以下是清单

Example3.java

Gson gson = new Gson();
// original object
ModelObject modelObject = new ModelObject("namesake", 50, true, 4.3);
System.out.print("Original Java object : ");
System.out.println(modelObject);

// converting to an json representation
String json = gson.toJson(modelObject);
System.out.print("Converted JSON string is : ");
System.out.println(json);

// getting back the object from json representation
ModelObject modelObject3 = gson.fromJson(json, ModelObject.class);
System.out.print("Converted Java object : ");
System.out.println(modelObject3);

因此,在进行转换时,GSON忽略了上述内容并输出如下

example3-输出

Original Java object : ModelObject [name=namesake, val=50, status=true, f=4.3]
Converted JSON string is : {"name":"namesake","status":true,"f":4.3}
Converted Java object : ModelObject [name=namesake, val=0, status=true, f=4.3]
Thats all folks, for GSON introduction !!

注意:我已经为所有示例提供了小段代码,要访问完整列表,请访问github上的要点

下一步是什么 ?

在接下来的几篇文章中,我将向您展示GSON库的一些额外好处,

所以,请继续关注!!!

参考:来自ajduke博客博客的JCG合作伙伴 Abhijeet Sutar的 Google GSON入门

翻译自: https://www.javacodegeeks.com/2013/08/getting-started-with-google-gson.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值