- 浏览: 7854559 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 1480方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 1967前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3416info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2186import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 448https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 631public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 554https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 624https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 398https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 4641 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3041微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 557https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1775什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 911本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1263原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 808public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 621在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 883-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 710一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1855介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
本文件集成orm数据库、volley网络下载以及gson解析,用起来非常方便
fastJson和gson的用法,解析最常用的是 json ,fastjson第三方库http://fastjson.codeplex.com/ http://www.json.org/
介绍: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. 压缩包里有以下文件: ...
Java JSON处理库之Gson的用法详解.rar
om.google.code.gson/gson/2.6.2 Gson maven依赖 java 开发包
浅析在Android系统中JSON和GSON的用法.pdf
gson2.7 下载即可使用 GSON是Google开发的Java API,用于转换Java对象和Json对象
gson jar包 gson jar包下载 gson jar包下载 gson jar包下载
赠送jar包:gson-2.8.0.jar; 赠送原API文档:gson-2.8.0-javadoc.jar; 赠送源代码:gson-2.8.0-sources.jar; 赠送Maven依赖信息文件:gson-2.8.0.pom; 包含翻译后的API文档:gson-2.8.0-javadoc-API文档-中文...
包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...
json我们在网络请求中经常用到,最近最火的微信小程序开发中... 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码解决您的问题。
com.google.gson.Gson 2.8.1 2.8.2 jar包 gson,直接解压到maven仓库,或者提取里面的jar包都可以使用
GSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串...
Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。 Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) from...
使用Gson的jar包进行数据格式的转换,包括单个对象,对象集合,map等等
赠送jar包:gson-2.8.7.jar; 赠送原API文档:gson-2.8.7-javadoc.jar; 赠送源代码:gson-2.8.7-sources.jar; 赠送Maven依赖信息文件:gson-2.8.7.pom; 包含翻译后的API文档:gson-2.8.7-javadoc-API文档-中文...
截止至2018-11-27,github上com.google.gson.Gson 最新的2.8.5jar包。强大的json字符串解析功能及将字符串转换为json格式。我16年上传的免费下载的2.8.0版本不知道为什么变成下载需要50分了
赠送jar包:gson-2.8.9.jar; 赠送原API文档:gson-2.8.9-javadoc.jar; 赠送源代码:gson-2.8.9-sources.jar; 赠送Maven依赖信息文件:gson-2.8.9.pom; 包含翻译后的API文档:gson-2.8.9-javadoc-API文档-中文...
截止至2016-12-23,github上com.google.gson.Gson 最新的2.8.0jar包。强大的json字符串解析功能及将字符串转换为json格式。才发现需要这么多分,大家也可以去网盘下载: ...
GSON完整包,包含三个jar包。 gson-2.2.4.jar GSON生成解析json数据的基本jar包; gson-2.2.4-javadoc.jar GSON API介绍文档包; gson-2.2.4-sources.jar GSON源码包。 下载一个玩玩吧!