- Jackson介绍
- Jackson入门程序
- Jackson ObjectMapper实现JSON实际的读/写
- Jackson对象序列化/反系列化
- Jackson数据绑定
- Jackson JSON映射到任何Java对象
- Jackson使用具体的Java对象和类型强制转换到JSON使用
- Jackson树模型JsonNode
- Jackson流式API JsonGenerator、JsonParser
开源项目
知识点
相关文章
更多最近更新
更多快速了解Gson
2019-03-21 23:49|来源: 网路
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。GSON核心jar包不到1M,非常精简,但提供的功能无疑是非常强大的,如果使用JDK自带的JSON解析API,使用起来相对比较繁琐一点,而且代码量较多。
Gson使用简单,可以实现含有多层引用、继承的java对象与json间转化,还可以通过annotation进行选择性的属性转化
Google Gson是一个开源的,基于Java的类库。它是由Google开发的,使用Gson有助于将Java对象序列化为JSON,反之亦然。 本教程采用简单直观的方式来描述Google Gson的基本到高级概念以及如何使用其API。
以下几点说明为什么应该使用这个库 -
标准化 - Gson是一个由Google管理的标准化库。
高效 - 这是对Java标准库的可靠,快速和高效的扩展。
优化 - Gson库经过高度优化。
支持泛型 - 它为泛型提供了广泛的支持。
支持复杂的内部类 - 它支持具有深度继承层次结构的复杂对象。
Gson的特点
这里列出了Gson的一些最显着的特点 -
易于使用 - Gson API提供了一个高级外观来简化常用的用例。
无需创建映射 - Gson API为大部分要序列化的对象提供了默认映射。
性能优 - Gson速度相当快,内存占用量低。 它适用于大型对象图或系统。
干净JSON - Gson创建一个干净而紧凑的JSON结果,它易于阅读。
无依赖性—Gson库不需要JDK以外的任何其他库。
开源 - Gson库是开源的; 它是免费提供的。
处理JSON的三种方法
Gson提供了三种处理JSON的替代方法 -
1. 流媒体API
它读取和写入JSON内容作为离散事件。 JsonReader
和JsonWriter
将数据读取/写入令牌,称为JsonToken
。
这是处理JSON的三种方法中最强大的方法。 它具有最低的开销,并且在读/写操作中速度非常快。 它类似于用于XML的Stax解析器。
2. 树模型
它准备JSON文档的内存树表示。 它构建了一个JsonObject
节点树。 这是一种灵活的方法,类似于XML的DOM解析器。
3. 数据绑定
它使用属性访问器将JSON转换为POJO(普通旧Java对象)并从中转换。 Gson使用数据类型适配器读取/写入JSON。 它类似于XML的JAXB解析器。
Gson特征:
1、提供简单的toJson()和fromJson()方法的java对象转换为JSON,反之亦然
2、允许预先存在不可改变的对象被转换为和从JSON
3、广泛支持的java泛型
4、允许自定义对象的意见
5、支持任意复杂的对象(深层次结果和继承泛型类型的广泛使用)
项目地址:
https://github.com/google/gson
最新版本:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.7</version>
</dependency>
常用API:
Gson gson = new Gson();//全部属性转换实例化 gson.toJson(user);//对象转化为json gson.fromJson(json, User.class);//json转化为对象 gson.toJson(list);//list转化为json gson.fromJson(json, new TypeToken<List<User>>(){}.getType());//json转化为list
简单示例:
Gson gson = new Gson();
Map map = new HashMap();
map.put("a", "b");
map.put("c", 5);
System.out.println(gson.toJson(map));
相关问答
更多-
冲突的GSON库(Conflicting GSON libs)[2024-01-26]
Millennial实际上是通过重命名内部GSON库来修复SDK 5.0.1版本(将于下周发布,等待一些额外的质量保证)。 Millennial SDK未经修改使用GSON 2.2.2版。 你可以在MMSDK.jar中使用GSON,或者,如果绝对必要的话,可以使用Millennial的JAR,并删除“com / google / gson /”目录并重新启动它。 像往常一样,您也可以直接与Millennial联系: https : //tools.mmedia.com/user/supportDevPort ... -
Gson到HashMap(Gson to HashMap)[2022-01-26]
使用TypeToken ,根据GSON常见问题解答 : Gson gson = new Gson(); Type stringStringMap = new TypeToken -
使用Gson和Anko(Using Gson and Anko)[2022-11-12]
更改模型名称MoviesData表单Films , val moviesData= gson.fromJson(moviesJsonString, MoviesData::class.java)//Here you get moviesData array . Change Model Name MoviesData Form Films, val moviesData= gson.fromJson(moviesJsonString, MoviesData::class.java)//Here you ... -
Gson StackOverflowError(Gson StackOverflowError)[2022-01-20]
Gson无法处理序列化数据中的循环引用。 你有机会。 解决这个问题,你已经解决了问题。 I created an issue for this on the google code site. http://code.google.com/p/google-gson/issues/detail?id=488 -
与Gson一起使用Realm(Using Realm with Gson)[2023-01-31]
您可能需要混合解决方案才能完成此项工作。 原因是@SerializedName是一个GSON注释,并不是Realm知道的。 所以这意味着你有两个选择,你已经发现: 1)使用GSON,这意味着最终结果是一个null name为默认值的对象。 2)使用createOrUpdateObjectFromJson这意味着_id将被忽略,因为Realm的JSON解析器需要1:1映射。 由于这两种解决方案都不能正常工作,您可以按照以下方式修改它们 1)使用GSON,而不是执行copyToRealmOrUpdate您可以手 ... -
来自Gson用户指南 : 如果字段标记为瞬态(默认情况下),则忽略该字段,并且不包括在JSON序列化或反序列化中。 ... 默认情况下,如果将字段标记为瞬态,则会将其排除。 同样,如果某个字段标记为“静态”,则默认情况下会将其排除。 因此,解决问题的方法只是将logger标记为瞬态或静态,例如: transient Logger logger = Logger.getRootLogger(); 这样,变量将从序列化和反序列化中排除,并且您不会得到该错误。 From the Gson User Guide: ...
-
替换这个: gson.toJson(p); String json = gson.toString(); 有了这个: String json = gson.toJson(p); Replace this: gson.toJson(p); String json = gson.toString(); with this: String json = gson.toJson(p);
-
GSON“NoClassDefFoundError com / google / gson / Gson”(GSON “NoClassDefFoundError com/google/gson/Gson”)[2023-06-16]
我相信你把javac和java参数顺序混淆了。 语法是: javac使用Gson的Ajax(Ajax using Gson)[2022-02-11]
成功回调函数似乎无法解析JSON结果。 尝试将值作为URL查询字符串传递给servlet,例如http://localhost/project/Analysis?team=some-value-you-know 然后使用像http://jsonlint.com这样的工具验证打印的JSON,修复你正在生成的JSON [可能是围绕JSON对象键的双引号]。 还可以尝试在浏览器中使用Developer Tools的JavaScript控制台,它将帮助您解决JavaScript错误。 希望这可以帮助, Shareb ...JsonSerializer是序列化Object的字段,而不是对象本身。 但是,您传递的对象已经告诉Gson要序列化。 下列 @Override public JsonElement serialize(ControlTransaction ctr, Type type, JsonSerializationContext context) { return context.serialize(ctr, type); } 相当于 @Override public JsonElemen ...