目录

Gson 概述与下载

Gson (反)序列化 Java 对象

JsonElement  Json 元素

JsonObject Json 对象

JsonArray Json 数组

JsonParser Json 解析

GsonBuilder 构建 Gson


Gson 概述与下载

1、Java 解析 Json 最常用的类库有:google 的 Gson、阿里巴巴的 FastJson、以及 Jackson。这些都是非常优秀而且常用的库。

2、GSON 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库,可以快速的将一个 Json 字符转成一个 Java 对象,或者将一个 Java 对象转化为 Json 字符串。

3、gson 在 github 上开源地址:https://github.com/google/gson

二进制开发包下载:gson 二进制开发包下载地址:Maven Central Repository Search

gson-2.8.4.jar下载、gson-2.8.5.jar下载

Maven 依赖:gson 在 Maven 仓库地址:https://mvnrepository.com/artifact/com.google.code.gson/gson

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version>
</dependency>

Gson (反)序列化 Java 对象

1、com.google.gson.Gson 提供 toJson() 和 fromJson() 方法用于序列化与反序列化  Java 对象。

2、Gson 对象的 toJson 方法可以将 Java 基本数据类型、数组、以及 POJO 对象、List、Map 、JsonElement  等转为 json 格式的字符串,

3、Gson 对象的 fromJson 方法做与 toJson 相反的操作,将 json 格式的字符串转为基本数据类型、 POJO 对象、List、Map 、JsonElement  等

对象序列化
 T fromJson(String json, Class<T> classOfT) 将指定的 Json 反序列化为指定类的对象,如果指定的类是泛型类型,则使用 fromJson(String, Type)方法。
T fromJson(String json, Type typeOfT) 将指定的 Json 反序列化为指定类型的对象,如果指定的对象是泛型类型,则此方法很有用,对于非泛型对象,请改用 fromJson(String json, Class<T> classOfT)
T fromJson(JsonElement json, Class<T> classOfT) 将指定的 json 元素反序列化为指定类型的对象,如果指定的类是泛型类型,则使用 fromJson(JsonElement, Type) 方法。
T fromJson(JsonElement json, Type typeOfT)
T fromJson(Reader json, Class<T> classOfT)
T fromJson(Reader json, Type typeOfT)
将从指定字符输入流读取的Json反序列化为指定类的对象,如果指定的类是泛型类型,则调用 {@link#fromJson(Reader,type)}
序列化为对象
String toJson(Object src) 将指定的对象序列化为其等效的Json表示形式,当指定的对象不是泛型类型时,应使用此方法,如果对象是泛型类型,请改用 toJson(object,type).
String toJson(Object src, Type typeOfSrc) 将指定的对象(包括泛型类型的对象)序列化为其等效的Json表示形式,对于非泛型对象,请改用{@link#toJson(Object)}
String toJson(JsonElement jsonElement) 将 JsonElement 转换为其等效的JSON表示形式。
JsonElement toJsonTree(Object src) 将指定的对象序列化为 JsonElement 的等效表示形式,当指定的对象不是泛型类型时,应使用此方法;如果对象是泛型类型,请改用{@link#toJsonTree(object,type)}
JsonElement toJsonTree(Object src, Type typeOfSrc)

API 演示源码:src/main/java/com/wmx/gson/GsonTest.java · 汪少棠/apache-study - Gitee.com

JsonElement  Json 元素

1、JsonObject、JsonArray、JsonPrimitive、JsonNull 都是 JsonElement 的子类,JsonElement  常用方法:

JsonElement deepCopy() 返回此元素的深层副本,克隆。
 BigDecimal getAsBigDecimal() 将此元素作为 BigDecimal 类型获取,如果元素不是 JsonPrimitive,则引发 ClassCastException,
如果元素不是有效的 BigDecimate,则 @throws NumberFormatException。
如果元素属于 JsonArray 类型,但包含多个元素,则引发 IllegalStateException。
BigInteger getAsBigInteger() 将此元素作为 BigInteger  类型获取,如果元素不是 JsonPrimitive,则引发 ClassCastException,
如果元素不是有效的 BigInteger ,则 @throws NumberFormatException。
如果元素属于 JsonArray 类型,但包含多个元素,则引发 IllegalStateException。
boolean getAsBoolean() 将此元素作为原始布尔值获取,如果元素不是 JsonPrimitive 并且不是有效的布尔值,则引发 ClassCastException,
如果元素属于 JsonArray 类型,但包含多个元素,则引发IllegalStateException
byte getAsByte() 将此元素作为原始 byte  值获取,如果元素不是 JsonPrimitive 并且不是有效的布尔值,则引发 ClassCastException,
如果元素属于 JsonArray 类型,但包含多个元素,则引发IllegalStateException

其它 Java 基本数据类型也是同理:

double getAsDouble()、char getAsCharacter()、float getAsFloat()、int getAsInt()、long getAsLong()、short getAsShort()

JsonArray getAsJsonArray() 将此元素作为 JsonArray 获取,如果元素是其他类型的元素,则会生成 IlleglastateException 异常,
因此最好先调用 isJsonArray() 方法确保该元素是所需的类型,然后再使用此方法。
JsonObject getAsJsonObject() 将此元素作为 JsonObject 获取,如果元素是其他类型的元素,则会引发 IlleglastateException 异常,
因此最好先通过调用 isJsonObject() 方法来确保该元素是所需类型之后使用此方法。
JsonPrimitive getAsJsonPrimitive()

将此元素作为 JsonPrimitive 获取,如果元素是其他类型的元素,则会引发 IlleglastateException 异常,
因此最好先通过调用 isJsonPrimitive() 方法来确保该元素是所需的类型之后再使用此方法。

JsonPrimitive 值可以是 Java 字符串、Java 基本数据类型及其包装器类型。

boolean isJsonArray()

验证此元素是否为数组,如果此元素属于 JsonArray 类型,则返回 true,否则返回 false。

boolean isJsonNull()

验证此元素是否表示 null 值,如果此元素的类型为 JsonNull,则返回 true,否则返回 false。

boolean isJsonObject()

验证此元素是否为 JsonObject 对象。

boolean isJsonPrimitive()

以验证此元素是否为 Java 数据类型。
    /*** JsonPrimitive getAsJsonPrimitive():* 将此元素作为 JsonPrimitive 获取,如果元素是其他类型的元素,则会引发 IlleglastateException 异常,* 因此最好先通过调用 isJsonPrimitive() 方法来确保该元素是所需的类型之后再使用此方法。JsonPrimitive 值可以是 Java 字符串、Java 基本数据类型及其包装器类型。*/@Testpublic void test12() {String json = "[\"本级小计\",368.00,328.00,]";JsonElement sourceJsonElement = new JsonParser().parse(json);JsonArray jsonArray = sourceJsonElement.getAsJsonArray();for (int i = 0; i < jsonArray.size(); i++) {JsonElement jsonElement = jsonArray.get(i);if (jsonElement.isJsonPrimitive()) {JsonPrimitive jsonPrimitive = jsonElement.getAsJsonPrimitive();if (jsonPrimitive.isString()) {System.out.println(jsonPrimitive.getAsString());} else if (jsonPrimitive.isNumber()) {System.out.println(jsonPrimitive.getAsDouble());}}}}

API 演示源码:src/main/java/com/wmx/gson/JsonObjectTest.java · 汪少棠/apache-study - Gitee.com

src/main/java/com/wmx/gson/JsonArrayTest.java · 汪少棠/apache-study - Gitee.com

JsonObject Json 对象

add(String property, JsonElement value) 添加一个健-值对的成员,名称必须是字符串,但值可以是任意的 JsonElement 类型。
addProperty(String property, Boolean value) 添加布尔成员的便利方法,指定的值将转换为布尔值的 JsonPrimitive。
addProperty(String property, Character value) 添加 char 成员的便利方法,指定的值将转换为字符的 JsonPrimitive。
addProperty(String property, Number value) 添加 Number  成员的便利方法,指定的值将转换为数字的 JsonPrimitive。
addProperty(String property, String value) 添加 String 成员的便利方法,指定的值将转换为数字的 JsonPrimitive。
Set<Map.Entry<String, JsonElement>> entrySet() 返回此对象的所有成员,集合是有序的,与元素的添加顺序相同。
JsonElement get(String memberName) 返回具有指定名称的成员。
JsonArray getAsJsonArray(String memberName) 获取指定成员作为 JsonArray 的便利方法。
JsonObject getAsJsonObject(String memberName) 获取指定成员作为 JsonObject 的便利方法。
JsonPrimitive getAsJsonPrimitive(String memberName) 获取指定成员作为 JsonPrimitive  的便利方法。
boolean has(String memberName) 检查此对象中是否存在具有指定名称的成员的便利方法。
Set<String> keySet() 返回所有成员的 key 值。
JsonElement remove(String property) 从此 JsonObject 中删除指定的属性,返回被删除的属性。
int size() 返回对象中键/值对的数目。
    /*** int size():返回对象中键/值对的数目。* Set<String> keySet():返回所有成员的键值*/@Testpublic void jsonObject7() {String json = "{\"pId\":9527,\"pName\":\"华安\",\"isMarry\":true}";JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();System.out.println(jsonObject.size());Set<String> keySet = jsonObject.keySet();//3System.out.println(keySet);//[pId, pName, isMarry]}

API 演示源码:src/main/java/com/wmx/gson/JsonObjectTest.java · 汪少棠/apache-study - Gitee.com

JsonArray Json 数组

JsonArray()

JsonArray(int capacity)

两个构造器,一个是创建空的 Json 数组,一个是指定初始容量。
add( Boolean value) 将指定的布尔值添加到 json 数组,如 value 为 null,则添加 JsonNull。
add(Character value) 将指定的 Character  值添加到 json 数组,如 value 为 null,则添加 JsonNull。
add(Number value) 将指定的 Number  值添加到 json 数组,如 value 为 null,则添加 JsonNull。
add(String value) 将指定的 String  值添加到 json 数组,如 value 为 null,则添加 JsonNull。
add(JsonElement value) 将指定的 JsonElement  值添加到 json 数组,如 value 为 null,则添加 JsonNull。
addAll(JsonArray array) 将指定数组中的所有元素添加到此 json 数组。
boolean contains(JsonElement element) 如果此数组包含指定的元素,则返回true。
JsonElement get(int i) 返回数组的第 i 个元素,如果下标越界,则抛异常
Iterator<JsonElement> iterator() 返回一个迭代器来导航数组的元,由于数组是一个有序列表,迭代器按照元素插入的顺序导航元素。
JsonElement remove(int index) 删除此数组中指定位置的元素,向左移动任何后续元素(从其索引中减去一个),返回从数组中删除的元素。
boolean remove(JsonElement element) 从该数组中删除第一个出现的指定元素(如果存在)。如果数组不包含元素,则它将保持不变。
JsonElement set(int index, JsonElement element) 将此数组中指定位置的元素替换为指定元素,元素不能为null。
int size() 返回数组的大小。
    @Testpublic void test4() {JsonArray jsonArray = new JsonParser().parse("[{\"code\":200,\"msg\":\"成功\"}]").getAsJsonArray();JsonArray deepCopy = jsonArray.deepCopy();deepCopy.add("Yes");System.out.println(jsonArray);//[{"code":200,"msg":"成功"}]System.out.println(deepCopy);//[{"code":200,"msg":"成功"},"Yes"]}

API 演示源码:src/main/java/com/wmx/gson/JsonArrayTest.java · 汪少棠/apache-study - Gitee.com

JsonParser Json 解析

1、JsonParser 用于将 Json 字符内容解析为  json 元素 JsonElement。

JsonElement parse(Reader json) 将指定的 JSON 字符串字符输入流解析为 Json 元素,如果指定的文本不是有效的 JSON 字符串,则抛出 JsonParseException 异常。
JsonElement parse(String json) 将指定的 JSON 字符串解析为 Json 元素,如果指定的文本不是有效的 JSON 字符串,则抛出 JsonParseException 异常。
    @Testpublic void test1() {String json = "{\"id\":1000,\"name\":\"华安\",\"birthday\":\"Jul 13, 2020 8:46:42 PM\",\"marry\":true}";JsonParser jsonParser = new JsonParser();JsonElement jsonElement = jsonParser.parse(json);JsonObject jsonObject = jsonElement.getAsJsonObject();System.out.println(jsonObject);//{"id":1000,"name":"华安","birthday":"Jul 13, 2020 8:46:42 PM","marry":true}}

API 演示源码:src/main/java/com/wmx/gson/JsonParserTest.java · 汪少棠/apache-study - Gitee.com

GsonBuilder 构建 Gson

1、对于默认配置的 Gson,直接使用 new Gson 更简单,当需要设置默认值以外的配置选项时,使用 GsonBuilder 构建器,调用它的各种配置方法,最后调用 create 方法创建 Gson 对象。

GsonBuilder serializeNulls() 序列化空字段,默认情况下,Gson 序列化期间会忽略所有为 null 的字段
GsonBuilder setDateFormat(String pattern) 根据提供的模式序列化 Date 日期对象,可以多次调用,但只有最后一次调用将用于决定序列化格式。

GsonBuilder setFieldNamingPolicy(FieldNamingPolicy namingConvention)

1、配置为在序列化和反序列化期间将特定命名策略应用于对象的字段。

2、namingConvention:用于序列化和反序列化的 JSON 字段命名约定/策略,可选值如下:

IDENTITY:使用对象默认的字段名称
UPPER_CAMEL_CASE:使用驼峰命名
UPPER_CAMEL_CASE_WITH_SPACES:将 Java 字段名的第一个'字母'在序列化为JSON格式时大写,单词之间用空格隔开
LOWER_CASE_WITH_UNDERSCORES:使用此命名策略将把 Java 字段名从大小写形式修改为全小写字段名,其中单词之间由下划线分隔
LOWER_CASE_WITH_DASHES:使用此命名策略将把 Java 字段名从大小写形式修改为全小写字段名,其中单词之间用破折号(-)分隔
LOWER_CASE_WITH_DOTS:使用此命名策略将 Java 字段名从大小写形式修改为全小写字段名,其中每个单词用点(.)分隔。

    @Testpublic void test1() {Gson gson = new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss").setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).create();Person person = new Person();person.setId(100);person.setBirthday(new Date());String toJson = gson.toJson(person);//{"id":100,"name":null,"birthday":"2020-07-19 11:37:35","marry":null}System.out.println(toJson);Person person1 = gson.fromJson(toJson, Person.class);//Person{id=100, name='null', birthday=Sun Jul 19 11:37:35 CST 2020, marry=null}System.out.println(person1);}

API 演示源码:src/main/java/com/wmx/gson/GsonBuilderTest.java · 汪少棠/apache-study - Gitee.com

Google Gson API 介绍与使用相关推荐

  1. Google Docs API 介绍

    本文由 @西西爸de札记 翻译,更新时间:2020-02-06 https://developers.google.com/docs/api/how-tos/overview 介绍 The Googl ...

  2. Google 地图 API 初级使用

    关于Google Map API的使用说明 1.Google Map API介绍 a) Google 地图 API 是一种通过 JavaScript 将 Google 地图嵌入到您的网页的 API.该 ...

  3. 分享两篇Google Map API的介绍

    这两篇文章也不知道我是什么时候下载下来的,一直丢在桌面上没有看,但终于在年后无聊就看了一下,结果让我心潮澎湃,一起哈成了"都让Google做了我们还做什么?(WebMap方向)"一 ...

  4. java 解析gson_使用Java和Google GSON解析ESPN API

    java 解析gson 在我的第一篇文章中,我将解释如何解析ESPN API. 可以在http://developer.espn.com/docs上找到API文档. 首先,您需要请求一个API密钥,然 ...

  5. 使用Java和Google GSON解析ESPN API

    在我的第一篇文章中,我将解释如何解析ESPN API. 可以在http://developer.espn.com/docs上找到API文档. 首先,您需要请求一个API密钥,然后可以开始查询REST ...

  6. Google Gson

    JackSon简单用法        FastJson简单用法 一.Gson介绍 1.什么是Gson Gson 是 Google 开发的Java API,是一个简单基于Java的开源库,可以相互转换J ...

  7. Google Map API 开发基础--01

    本章内容将针对如何使用Google Maps API中各个接口进行详细阐述,将采用实例加详解的方式,介绍Google Maps每个类的实际用途和一些WebGIS的开发技巧.在阅读完本章之后,我们希望开 ...

  8. 关于Google Map API V2 版本的定位与导航

    近来,在关注安卓手机上的GoogleMap应用的开发,但是目前官方API版本网页版已经升级到V3版,而对于Android的支持也已经升级到V2版本,虽然Google说继续对V1版提供服务,但是不再提供 ...

  9. Google Calendar API练习

    今天看一篇关于介绍如何在.NET下对Google Calendar API进行操作的文章. Link: http://www.cnblogs.com/SkyD/archive/2009/07/23/1 ...

  10. google map Api接口整理

    Google Map Api接口整理 一:基本知识: 1. 使用谷歌地图 API 的第一步就是要注册一个 API 密钥,需要注意一下两点: 1.如果使用 API 的页面还没有发布,只是在本地调试,可以 ...

最新文章

  1. mapreduce之partition分区
  2. 除自身以外数组的乘积leetcode 238
  3. 高级商务办公软件应用【12】
  4. 蓝海灵豚医疗器械管理软件医用耗材专版
  5. 计算机运算实际运算的误差,误差
  6. flutter 里面读取和复制内容到手机剪切板
  7. UE4 C++ 事件
  8. 简单几个操作小技巧提高你的生产力!☀️我好了,你呢☀️
  9. Linux下sqlite3移植与编程
  10. mysql outer join的用法_MySQL 8 中的连接语法JOIN、OUTER JOIN的相关用法
  11. 计算机cs怎么使用技巧,CS里的fps设置方法(显卡篇)
  12. 力扣杯-竞赛合集LCP 01. 猜数字
  13. java将字节转十六进制,Java代码将字节转换为十六进制
  14. 【前端】html综合案例:圣诞节的那些事、小说排行榜案例、注册页面
  15. vim插入模式小技巧
  16. 苹果皮的小奥秘_拔剑-浆糊的传说_新浪博客
  17. 转变:从SQL技术栈到图技术栈
  18. 柔性制造系统(FMS)实训QY-JDYT09
  19. 从程序员角度看ELF----__do_global_dtors_aux and __do_global_ctors_aux
  20. 网络编程 accept

热门文章

  1. android-Vibrator的使用
  2. SilverLight学习之基本图形
  3. member selection 运算符是什么
  4. shell引入sql脚本报错_Oracle11g rac集群安装执行脚本报错的解决方法
  5. 拓端tecdat|R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
  6. 拓端tecdat|python在Scikit-learn中用决策树和随机森林预测NBA获胜者
  7. 浙江省单考单招计算机提前招,2018浙江省各校高职提前招生简章汇总及深度解析...
  8. 每次连接服务器都要source ~/.bashrc问题
  9. 机器学习八大优质数据库
  10. 剑指Offer——Python答案