使用Google GSON:额外的赠品:第一部分

介绍

这是以前的Google GSON入门的后续文章,其中显示了有关使用Google Gson的入门资料。

本文显示了GSON库的一些其他优点。 由于有很多关于这些额外功能的文章要写,所以我将长篇文章分成2个系列,因此,这是其中一部分,在下一篇文章中,我将发布其余内容。

使用GSON库的好处在于,它不需要任何注释或配置即可进行简单转换。 尽管它使用默认配置来使事情变得简单。 GSON具有从Java对象创建Json的灵活性,反之亦然。 我们真正的Gson类包含json转换的许多默认值,但是我们可以使用GsonBuilder类覆盖默认值。 因此,让我们开始吧。

漂亮格式的JSON输出

当您打印使用Gson创建的json输出字符串时,您将在一行中看到输出,如下所示

{"name":"ajduke","languagesKnown":["Java","Scala","JavaScript"]}

这是称为压缩模式的默认格式化模式。 当您的json具有很多字段和组件时,阅读起来会变得更加困难。 为了正确格式化,该库具有漂亮的漂亮格式化模式,该模式将每一字段打印在一行中

要使用此功能,您需要使用GsonBuilder#setPrettyPrinting()创建Gson实例,如以下清单所示

以下是我们的类,其对象将转换为其json表示形式,

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");}
}

注意行号 7个使用,

Gson gson = new Gson();
String json = gson.toJson(new Developer());
System.out.println("********* Compact mode ***********");
System.out.println(json);GsonBuilder gsonBuilder = new GsonBuilder();
Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
json = prettyGson.toJson(new Developer());
System.out.println("\n ******* Pretty formatting *********");
System.out.println(json);

上面的输出是

********* Compact mode ***********
{"name":"ajduke","languagesKnown":["Java","Scala","Ruby"]}******* Pretty formatting *********
{"name": "ajduke","languagesKnown": ["Java","Scala","Ruby"]
}

在JSON输出中包含空字段

默认情况下,在转换为Json格式时,在转换中会忽略空值字段。 这仅仅是为了使输出清晰紧凑。

但是我们可以通过使用GsonBuilder #serializeNulls()创建Gson实例来覆盖此行为。 以下清单显示

class Developer {private String name;private String classz;List<String> languagesKnown;public Developer() {name = "ajduke";classz= "Developer";languagesKnown = new ArrayList<>();languagesKnown.add("Java");languagesKnown.add("Scala");languagesKnown.add("Ruby");}
}

请注意第.11行

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);

注意上面的输出,包括classz

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

包括自定义名称

默认情况下,json输出字段名称与类字段名称相同。 Gson提供了使用注释更改此方法的方法。

为此,我们需要使用为该字段提供的@serilizedName批注,我们需要在输出json中更改名称。

因此,我们的Developer类将名称更改为firstName

class Developer {@SerializedName("firstName")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();
String json = gson.toJson(new Developer());
System.out.println("********* Compact mode ***********");
System.out.println(json);GsonBuilder gsonBuilder = new GsonBuilder();
Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
json = prettyGson.toJson(new Developer());
System.out.println("\n ******* Pretty formatting *********");
System.out.println(json);

然后在输出中,我们将使用“ firstName”而不是“ name”

********* Compact mode ***********
{"firstName":"ajduke","languagesKnown":["Java","Scala","Ruby"]}******* Pretty formatting *********
{"firstName": "ajduke","languagesKnown": ["Java","Scala","Ruby"]
}

向/从流写入JSON

Gson库对每个方法toJson()和fromJson()都有一个重载,分别用于写入和读取流。 简单来说,您可以将json输出写入文件,字符或缓冲区,并且可以从任何Reader流中读取。

以下清单显示了如何在File流中写入和读取JSON

package in.ajduke.ap013;import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;public class GsonEx {public static void main(String[] args) throws IOException {Gson gson = new Gson();System.out.println("Writing JSON to file ....");// using try with resourcestry (FileWriter writer = new FileWriter("d:/output.json")) { gson.toJson(new Developer(), writer); // writing to file}System.out.println("Reading from file.. ");FileReader fileReader = new FileReader("d:/output.json");dev= gson.fromJson(fileReader, Developer.class);System.out.println(dev);}
}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");}@Overridepublic String toString() {return "Developer [name=" + name + ", classz=" + classz+ ", languagesKnown=" + languagesKnown + "]";}
}

参考: 使用Google GSON:额外的东西:来自ajduke博客博客的JCG合作伙伴 Abhijeet Sutar的 第一部分 。

翻译自: https://www.javacodegeeks.com/2014/01/using-google-gson-extra-goodies-part-i.html

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

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

相关文章

HDU 2181 哈密顿绕行世界问题 (dfs)

哈密顿绕行世界问题 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Description 一个规则的实心十二面体&#xff0c;它的 20个顶点标出世界著名的20个城市&#xff0c;你从一个城…

php resque 计划任务,PHP-RESQUE - 实现重试

因为PHP-Resque 的重试部分需要自己写&#xff0c;网上又没啥轮子&#xff0c;而且resque也已经很久不更新了&#xff0c;所以自己研究下resque的源码&#xff0c;然后也借鉴了Laravel的队列重试机制&#xff0c;实现了PHP-Resque的重试机制。Resque地址设计思路1.这里需要阅读…

RabbitMQ集群、镜像部署配置

1 RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现&#xff0c;服务器端用Erlang语言编写&#xff0c;支持多种客户端&#xff0c;如&#xff1a;Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等&#xff0c;支持AJAX。用于在分布式系统中存储转发消息…

C语言、c++实现超好玩植物大战僵尸(完整版附源码)

实现这个游戏需要Easy_X main.cpp //开发日志 //1导入素材 //2实现最开始的游戏场景 //3实现游戏顶部的工具栏 //4实现工具栏里面的游戏卡牌 #define WIN_WIDTH 900 #define WIN_HEIGHT 600 //定义植物类型 enum { WAN_DOU, XIANG_RI_KUI, ZHI_WU_COUNT }; #include<stdio.…

【代码笔记】Web-HTML-颜色

一&#xff0c;效果图。 二&#xff0c;代码。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>html 颜色</title> </head> <body> <!--html 颜色--> <p style"">> 通过十六…

java 如何去掉http debug日志_你居然还去服务器上捞日志,搭个日志收集系统难道不香吗?...

作者&#xff1a;MacroZheng链接&#xff1a;https://juejin.im/post/5eef217d51882565d74fb4eb来源&#xff1a;掘金SpringBoot实战电商项目mall&#xff08;35kstar&#xff09;地址&#xff1a;http://github.com/macrozheng/…摘要ELK日志收集系统进阶使用&#xff0c;本文…

GitHub的10,000个最受欢迎的Java项目-以下是它们使用的顶级库

随着Java开发人员正在使用既成熟又高度发展的语言来工作&#xff0c;无论何时编写新代码&#xff0c;我们都将面临一个持续的难题–使用大家都在谈论的热门新技术&#xff0c;或者坚持使用久经考验的库&#xff1f; 由于Java应用程序的很大一部分是商业性质的&#xff0c;因此…

JavaScript 事件机制(四)

JavaScript 事件机制 1 什么是事件 JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数的事件。比方说&#xff0c;我们可以在用户点击某按钮时产生一个 onClick 事件来触发某个函数。事件…

php设计是什么意思,php – 什么是更好的设计?

我有以下课程&#xff1a;class User {public function setName($value) { ... }public function setEmailAddress($value) { ... }public function setUsername($value) { ... }public function getName() { ... }public function getEmailAddress() { ... }public function g…

JavaScript——根据数组中的某个值进行排序

我这里是根据次数进行倒叙,可根据自己情况进行修改 function sortKey(array,key){return array.sort(function(a,b){var x a[key];var y b[key];return ((x>y)?-1:(x<y)?1:0)}) }; 转载于:https://www.cnblogs.com/wangyang0210/p/10185494.html

Java防止Xss注入json_每日一题(java篇) 如何防止xss注入

1、XssAndSqlHttpServletRequestWrapper 类&#xff1a;import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; public class XssAndSqlHttpServletRequestWrapper extends HttpServletReques…

【工具相关】web-HTML/CSS/JS Prettify的使用

一&#xff0c;打开Sublime Text,代码如下面所示。 二&#xff0c;鼠标右键--->HTML/CSS/JS Prettify--->Prettify Code.代码如图所示&#xff0c;明显的代码变得整齐了。 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

centos 多个mysql,Centos中安装多个MySQL数据的配置实例

这篇文章主要为大家详细介绍了Centos中安装多个MySQL数据的配置实例&#xff0c;具有一定的参考价值&#xff0c;可以用来参考一下。感兴趣的小伙伴&#xff0c;下面一起跟随512笔记的小编小韵来看看吧&#xff01;注:本文档做了两个MYSQL实例,多个实例方法以此类推LINUX操作系…

MS SQL 分页存储过程

最近换了家新公司&#xff0c;但是新公司没有使用分页的存储过程。那我就自个写一个往项目上套 &#xff08;效率怎么样就不怎么清楚没有详细的测试过&#xff09; CREATE PROCEDURE [dbo].[pro_common_pageList](tab NVARCHAR(MAX) ,---表名PrimaryKey VARCHAR(100) , --主键I…

了解Spring Web初始化

几年前&#xff0c;我们大多数人习惯到处编写XML配置文件&#xff0c;甚至可以设置简单的Java EE应用程序。 如今&#xff0c;使用Java或Groovy来配置项目已成为一种首选方式–您只需要看一下Spring框架的其他版本中引入的Gradle或功能&#xff0c;就可以对此进行总结。 现在&…

STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收

参考资料&#xff1a;1、ST HAL库官网资料 2、https://blog.csdn.net/u014470361/article/details/79206352#comments 一、STM32CubeMX配置外部时钟 注意在进行外部时钟配置时&#xff0c;即“High Speed Clock”和“Low Speed Clock”需配置成“Crytal/Ceramic Resonator&…

浅谈自记忆函数

浅谈自记忆函数 最近阅读《JavaScript忍者秘籍》看到了一种有趣的函数&#xff1a;自记忆函数。 简介 何为自记忆函数&#xff1f;书中提到&#xff1a; 记忆化&#xff08;memoization&#xff09;是一种构建函数的处理过程&#xff0c;能够记住上次计算结果 通过这句话可以…

pyqt5 qlabel无法显示图片_实战PyQt5: 011-单选框控件QRadioButton

单选框QRadioButton简介QRadioButton为单选按钮&#xff0c; 可以选中(打开)或者取消选中(关闭)。在一组单选按钮中&#xff0c;一次只能选中其中的一个按钮。选中或者取消选中QRadioButton&#xff0c; 都会发出toggled()信号。使用isChecked()可以查看是否选择了某个QRadioBu…

matlab数据游标不能使用,启用数据游标模式

文本解释器&#xff0c;指定为下列值之一&#xff1a;tex - 使用 TeX 标记子集解释字符。latex - 使用 LaTeX 标记解释字符。none - 显示字面字符。TeX 标记默认情况下&#xff0c;MATLAB 支持一部分 TeX 标记。使用 TeX 标记可添加下标和上标&#xff0c;修改字体类型和颜色&a…

MySQL 快速定位性能问题

一、性能查看几款小工具&#xff1a;Top 查看&#xff1a;观察 load average &#xff1a;1分钟&#xff0c;5分钟&#xff0c;15分钟的平均负载值1. us% 用户使用的 CPU 占比&#xff0c;如果 us% 太高&#xff0c; 极有可能索引使用不当。2. sy% 系统内核使用的CPU占比&#…