- 浏览: 7942077 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
本文小结基本用法和一些值得关注的gson用法
1 基本用法
假设有对象pojo,如下:
然后是转换为JSON以及对JSON的反向转换:
输出:
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();
比如:
使用方法:
3 如果不希望有某些属性,则使用transient屏蔽,如:
transient int val;
4 介绍一下如何输出漂亮的json格式,因为默认的输出是compact格式,就是比如:
{"name":"ajduke","languagesKnown":["Java","Scala","Ruby"]}
可以使用如下的方式输出漂亮格式的:
就是setPrettyPrinting选项了,输出的格式为:
******* Pretty formatting *********
{
"name": "ajduke",
"languagesKnown": [
"Java",
"Scala",
"Ruby"
]
}
5 把null值也转换,默认是不转换null值的,可以选择也转换,比如
则:
输出:
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 可以输出到流
8 使用@Since注解去维护版本,比如你有一个REST的API,并且有多个版本的JSON,如果下一个版本JSON中增加了字段,但又不希望所有的版本都在使用这些字段的话,就可以使用,比如:
输出为:
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 转义的,但也可以设置不转义,比如:
输出:
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,比如全部转换为小写,并用空格或者下划线分隔
比如:
输出:
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"}
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"}
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1575方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2019前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3469info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2235import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 490https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 689public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 609https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 670https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 435https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5401 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3100微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 616https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1844什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 965本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1362原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 861public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 673在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 939-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 770一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1905介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
这个压缩包文件"ORM+Volley+Gson用法"可能包含了集成这三个库的示例代码、配置文件、README文档等资源,帮助开发者理解和学习如何在Android项目中有效地结合使用ORM、Volley和Gson。通过研究这些示例,开发者可以...
JSON(JavaScript Object Notation)是一种轻...无论选择哪个库,理解其基本用法和核心特性,都能帮助我们在实际开发中更高效地处理JSON数据。同时,了解不同库的优势和适用场景,有助于我们做出最适合项目需求的选择。
Gson是Google开发的一款Java语言编写的库,用于在Java对象和JSON数据之间进行映射。这个库使得Java对象可以轻松地序列化成JSON格式,同时也可以从JSON字符串反序列化回Java对象。在Java开发中,Gson库非常常见,特别...
Gson库是由Google提供的一个Java库,其主要功能是帮助开发者在Java对象和JSON数据之间进行相互转换。...这就是Gson 2.7在实际开发中的基本用法。当然,根据实际需求,你可以进一步定制和扩展Gson的功能。
介绍: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. 压缩包里有以下文件: ...
三、基本用法 1. 对象转JSON字符串 要将Java对象转换为JSON字符串,可以使用Gson实例的`toJson()`方法: ```java Person person = new Person("张三", 30); Gson gson = new Gson(); String jsonString = gson.to...
Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。它的全称是Google Gson,主要用于将Java对象转换为JSON格式的字符串,也可以将JSON字符串反序列化为对应的Java对象。在Java开发中,...
浅析在Android系统中JSON和GSON的用法.pdf
Gson,全称为Google Simple JSON,是Google提供的一款开源库,用于在Java对象和JSON数据之间进行映射。这个库使得Java开发者能够轻松地将JSON字符串转换为等效的Java对象,反之亦然。在Java应用程序中,Gson库特别...
在了解Gson的基本用法前,先来理解一下JSON(JavaScript Object Notation)是什么。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,采用完全独立于语言...
GSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串...
Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。...通过理解和掌握Gson的基本用法和高级特性,开发者可以更高效地处理数据序列化和反序列化任务,提升项目的可维护性和可扩展性。
在这个例子中,`Person`类的实例被转换为JSON字符串,然后又从JSON字符串中解析回来,展示了Gson的基本用法。 总之,Gson-2.8.6.jar作为Java开发中的一个重要工具,为JSON操作提供了极大的便利,无论是简单的数据...
在本篇文章中,我们将深入探讨Gson库的基本用法、核心概念以及如何在项目中引入Gson库所需的jar文件。 首先,我们来了解什么是JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和...
包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...
下面将对Gson的基本用法和属性重命名进行详细介绍。 一、Gson的基本用法 Gson提供了fromJson()和toJson()两个方法,用于实现反序列化和序列化。fromJson()方法用于将JSON字符串反序列化为Java对象,而toJson()方法...
Gson是Google开发的一款强大的Java库,用于将Java对象转换为JSON格式的字符串,以及将JSON数据解析回等效的Java对象。这个压缩包包含了Gson库的版本2.8.1,它提供了两个主要的组件:`gson-2.8.1.jar`和`gson-2.8.1-...
Gson 是 Google 推出的一款 Java 语言编写的 JSON 库,它允许开发者将 Java 对象转换成 JSON 格式的字符串,反之亦然。...通过掌握 Gson 的基本用法和注解机制,开发者可以高效地在 JSON 和 Java 类之间进行数据交换。
使用Gson,你可以通过`Gson().toJson()`方法将Java对象转化为JSON字符串,通过`new Gson().fromJson()`方法将JSON字符串反序列化为Java对象。 例如: ```java Person person = new Person("John", "Doe"); String ...
Gson是Google推出的一款强大的Java库,主要用于在Java对象与JSON数据之间进行相互转换。它的全称是Google Simple JSON,自2008年发布以来,已经成为了Java开发者处理JSON数据的一个常用工具,尤其是在Android开发中...