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;}@Overridepublic 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;}@Overridepublic 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 frameworkjson 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;}@Overridepublic 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库的一些额外好处,
所以,请继续关注!!!
翻译自: https://www.javacodegeeks.com/2013/08/getting-started-with-google-gson.html
Google GSON入门相关推荐
- gson 入门_Google GSON入门
gson 入门 在Java世界中,JSON已成为事实上的XML数据交换格式标准,因为它的易用性和传输效率高. 如果您不了解JSON,那就是Javascript对象表示法,这是一种基于文本的数据交换格式 ...
- 使用Google GSON:额外的赠品:第一部分
介绍 这是以前的Google GSON入门的后续文章,其中显示了有关使用Google Gson的入门资料. 本文显示了GSON库的一些其他优点. 由于有很多关于这些额外功能的文章要写,所以我将长篇文章 ...
- Retrofit 泛型解析遇到com.google.gson.internal.LinkedTreeMap cannot be cast to object
在Retrofit网络请求数据,使用泛型解析json时,出现了com.google.gson.internal.LinkedTreeMap cannot be cast to com.xylife.c ...
- com.google.gson.Gson 使用详解
import com.google.gson.Gson出错,标红 这个主要是缺少jar包,搜索这个jar包添加到Libs里面就可以了 下载地址:https://mvnrepository.com/ar ...
- Google Gson的使用方法及JSON 技术对比
为什么80%的码农都做不了架构师?>>> 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib ...
- Google Gson 使用简介
原文:http://www.cnblogs.com/haippy/archive/2012/05/20/2509329.html 一.如何将数组转化为 json 串? 下面的例子中我们示例如何将一个数 ...
- com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGI
报错如下: 2020-03-05 18:41:55.161 5576-5576/com.xiayiye.takeout W/System.err: com.google.gson.JsonSyntax ...
- Android之奔溃提示com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap
1 问题 Android端获取服务端的数据然后我直接把数据转hashMap提示错误如下, com.google.gson.internal.LinkedTreeMap cannot be cast t ...
- java 解析gson_使用Java和Google GSON解析ESPN API
java 解析gson 在我的第一篇文章中,我将解释如何解析ESPN API. 可以在http://developer.espn.com/docs上找到API文档. 首先,您需要请求一个API密钥,然 ...
最新文章
- C#程序设计语言Version2.0简介
- test_bit、set_bit和clear_bit
- VTK:可视化之CollisionDetection
- ubuntu20.04屏幕闪烁与分辨率的问题
- 前端学习(2460):粉丝管理
- 利用Relations实现多DataTable的聚合
- Python 实现针对时间序列预测的特征选择
- Android开发笔记(一百七十七)借助FileProvider安装应用
- java程序执行顺序
- paper 108:系统学习数字图像处理之图像复原与重建
- python3 输出内容格式化
- 【程序源代码】万岳在线教育系统WEB开源版
- git查看commit提交记录详情
- 2sum,3sum,4sum问题总结
- 廉颇老矣?尚能饭否?64岁的Python之父被微软录取!
- C语言——函数定义及用法【内部函数外部函数内联函数】
- shel脚本基础系列(一)变量
- vs2017工具箱问题(不见工具箱选项卡此组中没有可用控件控件灰化)
- python中数字加引号和不加引号的区别_高考完小白自学Python,不太懂print语句中一个加引号,一个不加?...
- 认知系列4: 《认知突围》笔记
热门文章
- 软件测试遇到的异常情况,豪之诺软件测试项目开发中遇到比较多的Bug总结
- delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点
- thinking-in-java(13) String字符串
- MySQL的CRUD操作+使用视图
- 朝着理想坚实迈进_坚实原则:接口隔离原则
- mfc 弹簧_弹簧和线程:异步
- kafka streams_Kafka REST Proxy MapR Streams入门
- java 8 lambda_异常作弊– Java 8 Lambdas
- OAuth 2.0 Java指南:5分钟保护您的应用程序安全
- JMetro版本11.6.5和8.6.5发布