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库的一些额外好处,

所以,请继续关注!!!

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[译文]过犹不及,别再在编程中高射炮打蚊子

原文链接&#xff1a;Anyway,stop recommending bazookas to kill flies in programming. 众成翻译地址&#xff1a;过犹不及&#xff0c;别再在编程中高射炮打蚊子 译者注&#xff1a;翻译这篇吐槽的文章&#xff0c;主要是为了自省~日常工作中确实会犯类似的错误&#xff0…

Java中的for循环

上一章呢我们学习了一下java中的while循环和do while循环 现在我们来了解一下另外一种循环 for循环 for循环是编程语言中一种开界的循环语句&#xff0c;而循环语句 由循环体及循环的终止条件两部分组成&#xff0c;for循环其在各种编程语言中的实现与表达有所出入&#xff0…

SpringFox swagger2 and SpringFox swagger2 UI 接口文档生成与查看

依赖&#xff1a; <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> <…

matlab期末复习资料,MATLAB期末复习习题及答案

MATLAB期末复习习题及答案13&#xff0c; ysin(x)&#xff0c;x从0到2 &#xff0c; x0.02 &#xff0c;求y的最大值、最小值、均值和标准差。(应用max,min,mean,std) 14&#xff0c; 参照课件中例题的方法&#xff0c;计算表达式z 10x3 y5e xcontour, hold on, quiver)15&…

多核可扩展计数器

到处都需要计数器&#xff0c;例如&#xff0c;查找应用程序的关键KPI&#xff0c;应用程序的负载&#xff0c;服务的请求总数&#xff0c;用于查找应用程序吞吐量的一些KPI等。 由于所有这些需求&#xff0c;并发复杂性也增加了&#xff0c;这使这个问题变得有趣。 如何实现…

三年前端,面试思考(二)

为什么还有&#xff08;二&#xff09; 没有想到上一篇 《三年前端&#xff0c;面试思考》 有这么多前端同学看到。 在评论区也有很多鼓励和质疑的声音&#xff0c;而且群里面交流的同学两天就达到了700人。 群里有同学问了很多问题&#xff0c;同时希望我再分享一些面试技巧…

React入门-ReactDOM.render()介绍

React中的核心概念 1 虚拟DOM&#xff08;Virtual DOM&#xff09;2 Diff算法&#xff08;虚拟DOM的加速器&#xff0c;提升React性能的法宝&#xff09;虚拟DOM&#xff08;Vitural DOM&#xff09; React将DOM抽象为虚拟DOM&#xff0c;虚拟DOM其实就是用一个对象来描述DOM&a…

51单片机auxr寄存器_MCS-51单片机有几个工作寄存器

工作寄存器有4组&#xff0c;每组都是8个工作寄存器R0~R7&#xff0c;通过PSW中的RS1、RS0两位来选择使用哪一组&#xff0c;如果不选&#xff0c;默认是选择第0组。RS1RS0组合为00时&#xff0c;选中第0组工作寄存器&#xff0c;R0~R7地址为00H~07H;RS1RS0组合为01时&#xff…

柯里化

柯里化(currying)&#xff0c;是指把接受多个参数的函数变换成接受一个单一参数&#xff08;最初函数的第一个参数&#xff09;的函数&#xff0c;并且返回接受余下参数而且返回结果的新函数的技术。 柯里化是理解装饰器函数的一个非常重要的知识点。 比如&#xff0c;将加法函…

matlab中quat2angle,RPY_Euler_Quaternion_AngleAxis角度转化:Matlab、Python、Halc

RPY_Euler_Quaternion_AngleAxis角度转化&#xff1a;Matlab、Python、HalcRPY_Euler_Quaternion_AngleAxis角度转化&#xff1a;Matlab、Python、Halcon版本UR协作机器人和Franka机器人导出的位姿为angleVector&#xff0c;三个量表示&#xff0c;在Matlab中angleVector是四个…

基本注射/资格赛,范围

这是上周解决的DI / CDI基础知识的延续-在本文中&#xff0c;我将讨论基础注入&#xff0c;限定词和范围。 在上一个主题中&#xff0c;我们提供了有关DI / CDI概念的大量信息&#xff0c;我们还讨论了如何使用注释加载这些bean或类-这构成了对象的组成并创建了关于如何进行采…

100*100的 canvas 占多少内存?

题目 100*100的 canvas 占多少内存&#xff1f; 在 三年前端&#xff0c;面试思考 中提到了一个题目&#xff0c;非常有新意&#xff0c;这里分享一下当时面试的思考过程。 解题思路 其实真正的答案是多少我并不清楚&#xff0c;面试过程中面试官也不期待一个准确的答案&am…

python,获取用户输入,并且将输入的内容写到.txt

该功能缺点是必须保证该文件不存在的情况才会成功 fopen(E:/mywork/保存文件.txt,x)def userwrite(code):if codew:f.close()return Falseelse:f.writelines(code\n)return True isbool True count 0 while isbool:codeif count0:code input("请输入内容&#xff1a;\n…

1t硬盘怎么分区最好_这下尴尬了,电脑硬盘分区常见误区,移动硬盘分区方法...

大家买了新电脑硬盘要不要分区呢&#xff1f;像以往咱们买了新电脑一般会分4个区&#xff0c;C、D、E、F&#xff0c;方便更合理的分类使用&#xff0c;比如把工作放为D盘&#xff0c;娱乐影音放为E盘&#xff0c;游戏放为F盘&#xff0c;C盘为系统盘。不过渐渐地发现&#xff…

matlab仿真环境,高低温环境模拟系统MATLAB仿真研究

1] Sadoun B. Applied system simulation:a review study[J] Information Sciences, 2000, 124:173~192[2] 王子介,Krauss G. 热交换器的微元模拟法及求解[J] 制冷学报, 2000,(1):33~39 Wang Zijie,Krauss G. Unit simulation method for heat-exchanger[J] Journal of Refrige…

用Spring长轮询Tomcat

就像喜剧演员弗兰基 豪威尔 &#xff08; Frankie Howerd&#xff09;所说的“哦&#xff0c;小姐小姐” &#xff0c;但足够多的英国影射和双重诱惑&#xff0c;因为长轮询雄猫对隔壁的闷气不是某种性偏见&#xff0c;这是一种技术&#xff08;或更像是一种骇客&#xff09;由…

.net core 编译时报错 Package Microsoft.Composition 1.0.27 is not compatible with netcoreapp1.1

查找错误项目 通过命令行cd到项目位置&#xff0c;执行dotnet restore命令查看具体报错项目。 解决方案 去项目中找到项目解决方案.csproj > 编辑 > PropertyGroup节点 > 添加如下代码 <PropertyGroup><TargetFramework>netcoreapp1.1</TargetFramewor…

支援一波 《面试数十人有感》

戳原文 无意间看到原博主的这篇文章&#xff0c;强调基础和原理&#xff0c;略有同感。 然而却发现评论区简直 ~ 辣眼睛 ~ 比如 活在梦里的面试官 我觉着吧&#xff0c;技术迭代的这么快&#xff0c;公司更需要的是有能力、有思想解决技术问题的人&#xff0c;并不代表说基础…

exchange 删除邮件

一 批量删除特定主题的邮件1.1 批量删除所有数据库中特定主题的邮件1) 群发了几封主题为“backup”的邮件&#xff1b; 2) 当前操作账号需要满足如下需求&#xff1a; a)该账号需属于Exchange Server 管理员角色以及源服务器和目标服务器的本地 Administrator组&#xff1b; b)…

js点击取消按钮关闭当前弹框_UI设计中“取消按钮”的分析详解

按钮&#xff0c;无论是在 Web 还是 App 上都被广泛地使用&#xff0c;而很少有设计师会注意到按钮当中的细节&#xff0c;导致在设计过程中出现一些低级的错误&#xff0c;使得用户在完成任务的过程中产生阻碍&#xff0c;无法顺利达成目的。在许多优秀的产品中&#xff0c;关…