JSON
Luckie stone
Android应用开发。
展开
-
Gson 自定义类型适配器 (TypeAdapter)
Gson的TypeAapter可以理解成自定义序列化和返序列化。自定义类型适配器需要实现两个接口:JsonSerializer<T>JsonDeserializer<T>和两个方法://序列化 public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext c...原创 2018-05-04 10:47:27 · 9718 阅读 · 0 评论 -
Google Gson 应用泛型
思考如何解析如下两个 JSON 字符串{ "id":1, "user": { "account":"admin", "password":"123456", "name":"John", "age":30 }, "memo":"xxx"转载 2018-08-13 06:28:43 · 643 阅读 · 0 评论 -
Google Gson 手动实现字符串的反序列化和序列化
1 手动实现字符串的反序列化实际上使用的是 com.google.gson.stream.JsonReader 类@Testpublic void test() throws IOException { String jsonStr = "{\"account\":\"admin\",\"password\":\"123456\",\"name\":\"John\"转载 2018-08-13 06:28:51 · 1192 阅读 · 0 评论 -
Google Gson 序列化 null 值
Gson 在默认情况下不会序列化导出 null 值示例:(1) POJO 类public class User { private String account; private String password; private String name; private int age; public String getAccoun...转载 2018-08-13 06:28:59 · 1958 阅读 · 0 评论 -
Google Gson 格式化日期时间
示例 1@Testpublic void test() throws IOException { Gson gson = new GsonBuilder() .setDateFormat("yyyy-MM-dd") .create(); System.out.println(gson.toJson(new Date()));}运行结果:...转载 2018-08-13 06:29:06 · 3183 阅读 · 1 评论 -
Google Gson 禁止序列化内部类
1 新建包含内部类的 POJO 类public class User { private String account; private String password; private String name; private int age; private Address address; public User() {}...转载 2018-08-13 06:29:13 · 2669 阅读 · 1 评论 -
Google Gson 格式化字符串输出
POJO 类public class User { private String account; private String password; private String name; private int age; private Address address; public User() {} public ...转载 2018-08-13 06:29:23 · 2516 阅读 · 0 评论 -
Google Gson 字段过滤:@Expose
Google Gson 使用 @Expose 注解实现字段过滤,该注解必须和 com.google.gson.GsonBuilder 类配合使用,如果使用 com.google.gson.Gson 类则不会产生任何作用。(1) @Expose(serialize = true, deserialize = true):序列化和反序列化时都生效,即序列化和反序列化都会处理(2) @Expos...转载 2018-08-14 06:38:43 · 4733 阅读 · 0 评论 -
Google Gson 字段过滤:基于 Gson 版本
当为生成的 Google Gson 对象指定版本信息时,可以使用 @Since 和 @Until 注释实现字段过滤。@Since 和 @Until 都接收一个 double 类型参数。@Since 当设置的 Gson 对象版本大于或等于其所接收的参数时导出该字段@Until 当设置的 Gson 对象版本小于其所接收的参数时导出该字段示例(1) POJO 对象public cl...转载 2018-08-14 06:38:50 · 440 阅读 · 0 评论 -
Google Gson 字段过滤:基于访问修饰符
Google Gson 支持基于 Java 访问修饰符过滤字段,包括:public / default / protected / private / static / final1示例(1) POJO 类class GsonObject { public String publicField = "PUBLIC"; String defaultField =...转载 2018-08-14 06:38:57 · 210 阅读 · 0 评论 -
Google Gson 字段过滤:自定义过滤规则
Google Gson 支持自定义规则过滤字段,使用 GsonBuilder 类的 addSerializationExclusionStrategy 方法处理序列化过程中的字段过滤,使用 addDeserializationExclusionStrategy 方法处理反序列化过程中的字段过滤。这两个方法都接收 com.google.gson.ExclusionStrategy 接口类型参数示...转载 2018-08-14 06:39:08 · 1195 阅读 · 0 评论 -
Google Gson:POJO 和 JSON 的字段映射规则
GsonBuilder 类的 setFieldNamingPolicy 和 setFieldNamingStrategy 方法可以定义 POJO 和 JSON 的字段映射规则1 setFieldNamingPolicy示例POJOpublic class User { private String name; private String phoneNumbe...转载 2018-08-14 06:39:16 · 1900 阅读 · 0 评论 -
Google Gson:TypeAdapter
TypeAdapter 是 Gson 2.0 开始的一个抽象类,用于接管某种类型的序列化和反序列化过程TypeAdapter 的两个主要方法public abstract class TypeAdapter<T> { public abstract void write(JsonWriter out, T value) throws IOException; ...转载 2018-08-14 06:39:24 · 427 阅读 · 0 评论 -
Google Gson:JsonSerializer 和 JsonDeserializer
Gson 使用 JsonSerializer 接管序列化过程,JsonDeserializer 接管反序列化过程1 JsonSerializer测试代码:@Testpublic void test() throws IOException { JsonSerializer<String> stringJsonSerializer = new JsonSerial...转载 2018-08-14 06:40:02 · 7377 阅读 · 0 评论 -
org.json源码分析及增强(二)——org.json.JSONException: Duplicate key问题处理
org.json.JSONException: Duplicate key问题的出现当使用JSONObject处理如json{\"key\" : 1,\"key\" : 2}"这样的JSON数据格式的字符串时,或使用JSONArray处理json[{\"key\" : 1,\"key\" : 2}, {\"key\" : 3,\"key\" : 4}]的数组字符串时,org.转载 2018-08-05 06:40:54 · 2427 阅读 · 0 评论 -
org.json源码分析及增强(一)——JSONObject对象与Java对象相互转换
本系列文章将对org.json(https://github.com/stleary/JSON-java)的部分源代码进行分析,并介绍如何将其缺少的一些功能进行增强和完善。为什么是org.jsonJava世界中存在着各种针对JSON数据格式类型处理的各种利器,优秀者比如google-gson、Jackson、Genson、Flexjson等(可以从http://www.json.org/站...转载 2018-08-05 06:40:47 · 12474 阅读 · 2 评论 -
Gson中TypeToken如何实现获取参数类型
情景引入: 在使用GSON解析一段JSON数组时,需要借助TypeToken将期望解析成的数据类型传入到fromJson()方法中,如下: List<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>(){}.getType());假设一段JSON格式的数据如下:...转载 2018-09-24 14:54:36 · 645 阅读 · 0 评论 -
Android:Gson通过借助TypeToken获取泛型参数的类型的方法
最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下。 由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型)。 但是有的时候,我们确实需要获知泛型参数的类型,比如将使用...转载 2018-09-24 15:00:21 · 1645 阅读 · 0 评论 -
Google Gson 解析字符串数组和字符串列表
String 类型数组和 String 类型列表的 JSON 字符串表示是一致的,如["Beijing","Shanghai","Guangzhou","Chengdu"] 解析如上 JSON 字符串即可以使用 String 类型数组,也可以使用 String 类型列表1 使用 String 类型数组解析@Testpublic void test() { Gson...转载 2018-08-13 06:28:31 · 4639 阅读 · 0 评论 -
Google Gson 属性重命名(@SerializedName 注解)
默认情况下解析和生成 JSON 字符串要求键名称和 POJO 类的属性名一一对应,实际应用中常常出现不一致现象,如期望字符串:{“account”:”admin”,”password”:”123456”,”age”:30}实际字符串:{“account”:”admin”,”code”:”123456”,”age”:30}Gson 使用 @SerializedName 注解解决 JSON...转载 2018-08-13 06:28:24 · 5242 阅读 · 0 评论 -
Google Gson 基本用法
Google Gson 提供了 fromJson() 和 toJson() 两个方法用于解析和生成 JSON 字符串fromJson() 实现了 JSON 字符串的反序列化toJson() 实现了 JSON 字符串的序列化示例:1 Eclipse 中 添加 Maven 依赖<dependency> <groupId>com.google.cod...转载 2018-08-13 06:28:17 · 1509 阅读 · 0 评论 -
@JSONField 注解说明
导入@JSONField 注解:import com.alibaba.fastjson.annotation.JSONField;一、常见用法:1、指定字段的名称@JSONField(name="role_name") private String roleName; 2、使用format制定日期格式public class A { // ...转载 2018-06-17 07:53:28 · 3648 阅读 · 0 评论 -
Gson用户指南(中文翻译)
概述Gson是这样一个Java类库,它可以将Java对象转换为相应的JSON形式,也可以将JSON字符串转换为对应的Java对象。Gson是一个开源库,其地址为:http://code.google.com/p/google-gson。 Gson可以使用任意Java对象,包括哪些预先存在的、不在你的源代码中的对象(因此,你并不知道对象的属性)。Gson的目标提供一种机制,使得将Jav...转载 2018-08-04 06:35:41 · 1219 阅读 · 0 评论 -
Gson教程一(译):Java-JSON的序列化和反序列化
Gson依赖该指南是实践性的并会立刻实现一些序列化。因为大部分的读者来自Android开发者,因此这是专门为你们定制的,但是Gson可以用于任何的Java环境。在我们开始之前,我们得将Gson库引进项目。在我写该文档时,最新版本为2.8.2。如果你使用的是Gradle,请添加下行代码:compile 'com.google.code.gson:gson:2.8.2' 如果你使用的是...转载 2018-08-04 06:35:59 · 668 阅读 · 0 评论 -
Gson教程二(译):嵌套对象的序列化和反序列化
嵌套对象的序列化我们希望通过实际的例子来阐述功能,因此让我们来扩展我们的UserSimple模型。在之前的发布中,user模型仅仅有一些基本的Java类型:public class UserSimple { String name; String email; boolean isDeveloper; int age;}现在,我们的user还拥...转载 2018-08-04 06:36:06 · 1053 阅读 · 0 评论 -
Gson教程三(译):Arrays和Lists的映射
Arrays和Lists之间的不同在进入正题之前,我们想阐述一下Arrays和Lists这两种Java数据结构。他们的Java实现是不同的并且各有各的优势。在你的用例中采取哪种方式取决于软件需求以及你个人的喜好。有趣的是,什么是选择list还是array结构映射到JSON是无关紧要的。在JSON的数据格式中,没有lists和arrays。是的,Java的实现造成了二者之间巨大的区别,但在就...转载 2018-08-04 06:36:15 · 236 阅读 · 0 评论 -
Gson教程四(译):Maps的映射
Java Maps的序列化Java maps是一种非常具有弹性数据类型,它可以用于各种各样的场景。它使得我们开发者运用Java程序语言可以实现很多真实世界的场景。因为Java maps的使用范围如此之广,因此这里可能不会和你的用例相同,但方法时适合所有用例的。让我们从这样一个场景开始,你的App拥有一个雇员姓名列表。你被要求实现这样一个View,它可以显示所有以某个特定字母开头的雇员。例如...转载 2018-08-04 06:36:29 · 200 阅读 · 0 评论 -
Gson教程五(译):Sets的映射
序列化Java SetsJava的集合框架包括大量的数据结构。我们已经讨论过lists和maps,它们在JSON的表达中有些许不同。这周,我们探究Sets。HashSet可以使你的数据集合例子中的值保持唯一性。因为sets有其存在的理由并且应用有现实世界,Gson也需要有能力去处理它们。因此,让我们来看这样一个例子。你的app拥有这样一个功能,可以使得众多的用户可以加入到一个团队中。当然,...转载 2018-08-04 06:36:54 · 200 阅读 · 0 评论 -
Gson教程六(译):空值的映射
值为空时将会发生什么?我们假设你已经阅读了我们关于Gson的首篇博客,里面介绍了UserSimple类以及它的成员变量。在我们之前的例子中,所有的值都设置了。如果某个值为空将会发生什么?例如,我们创建了一个user,他拥有邮件,年龄而且是一名开发者,但是名字为空。UserSimple userObject = new UserSimple(null, "norman@futurestud...转载 2018-08-04 06:37:02 · 242 阅读 · 0 评论 -
Gson教程七(译):@SerializedName和@Expose
使用@Expose忽略某些域@Expose注解模型在阅读了之前关于处理空值的教程后,你可能会想,你能够将一个Java对象设置为空值,但如何才能够使之不出现在JSON中呢?这在你不想传送你的私有或者敏感数据到网络上时是必要的。不用担心,Gson提供的@Expose注解能轻松解决这个问题。@Expose注解是可选择的并且提供了两个配置参数:serialize和deserialize。默认情...转载 2018-08-04 06:37:11 · 917 阅读 · 0 评论 -
Gson教程八(译):GsonBuilder基础和命名策略
在这一系列之前发布的博客中,你已经学会了使用Gson将Java对象转换为JSON或与之相反。到目前为止,我们已经向你展示如何建构一个模型,对于得到正确的映射来说什么是重要的。从这篇博客开始,我们将会发表这一系列教程中的多篇博客,这会使你知道如何使用GsonBuilder去自定义Gson行为的多个方面。GsonBuilder基础在之前所有发表的博客中,仅仅使用了Gson gson = new...转载 2018-08-04 06:37:21 · 5292 阅读 · 1 评论 -
Gson教程九(译):强制序列化null值
在上一篇博客中,我们已经向你展示了GsonBuilder的基础。GsonBuilder可以用于自定义Gson的行为,从而影响序列化和反序列化的方方面面。在这篇博客中,你将学会如何使用强制Gson序列化空值。空值的序列化还记得之前发布的关于空值映射的博客吗?它通过很多例子向我们展示了,当值为空时Gson是如何行为的。如果你还没有阅读,你或许可以移步到那篇博客获取有价值的信息。如果你很心急,我...转载 2018-08-04 06:37:35 · 444 阅读 · 0 评论 -
Gson教程十(译):Exclusion Strategies
在之前发表的博客中,你已经学习了一些关于控制某些属性是否会被序列化和反序列化的技术。到目前为止,这还处于属性层级。你可以在同一时间改变序列化和反序列化的某一要素。在本篇博客,我们将探讨一种如何设置更多普遍规则的方式来空值属性的转换。比transient和@Expose更牛逼的排除策略你已经学习了transient以及@Expose了,它们可以改变序列化和反序列化过程中的单个属性。下面我们将...转载 2018-08-05 06:40:16 · 487 阅读 · 0 评论 -
Gson教程十一(译):轻松使用仁慈的Gson(容错机制)
注:文中的“仁慈的”一词翻译自英文Lenient,其大意是具有一定的容错机制,因为不好翻译,所以暂且如此JSON内容的格式必须完全遵守一些标准规则。该标准是在RFC4627规范描述的。它所依赖的基础是键和值的分离,数组是如何结构化的等等。在这篇博客中,我们将会探索Gson和JSON规范之间的关系。默认是仁慈的?首先,当Gson序列化一个Java对象到JSON时,该JSON会100%遵循...转载 2018-08-05 06:40:23 · 409 阅读 · 0 评论 -
Gson教程十二(译):Float和Double类型的特殊值
上一篇博客中,我们探讨了如何使得JSON的转换具有仁慈性。仁慈性意味着允许JSON某些地方不遵循标准而Gson依然能够解析。在这篇博客中,我们将探究一种允许非标准输入的情况:Gson如何处理Float和Double类型的特殊值(比如**Float.NEGATIVE_INFINITY)。Float和Double类型的特殊值在Java中,某些特殊情况下需要将值置为float型和double型。...转载 2018-08-05 06:40:30 · 591 阅读 · 0 评论 -
Gson教程十三:模型版本化、日期格式化、漂亮输出
由于Gson Tutorial Series系列教程关于这三部分没有开放,因此自己完成本部分内容,有些内容翻译自相关API,有些内容自己所创,由于能力有限,如有错误还请指出,以后网站相关内容公布后,再行翻译至此模型版本化Gson可以通过@Since注解以及@Until注解来为你的Java对象设置版本控制,如此,则你的模型类里面被以上两个注解标记了的成员变量,将只有符合特定版本范围内时才会被...转载 2018-08-05 06:40:36 · 946 阅读 · 0 评论 -
Gson自定义适配器处理特殊解析异常
什么时候会用到这个?1、本来解析字符串 “24” 转成int 的24,但如果有些情况下给你返了个空字符串,实际上我们需要把空字符串转成一个固定的值-1 2、本来是解析一个对象,但是后台直接传回来一个null(这表示整个对象是null,正常一般后台会new一个空对象给你) 3、服务器返回的数据中data字段类型不固定,比如请求成功data是一个List,不成功的时候是String类型,这样前...转载 2018-07-30 05:47:38 · 1157 阅读 · 0 评论 -
Google Gson 简介
1 Gson 简介(1) GitHub 上对 Gson 的描述:(2) Gson 在 GitHub 上的主页https://github.com/google/gson1(3) Gson API(当前 Gson 最新稳定版本为 2.8.0)http://www.javadoc.io/doc/com.google.code.gson/gson/2.8.01(4) ...转载 2018-08-13 06:28:11 · 299 阅读 · 0 评论 -
Gson解析泛型对象时TypeToken的使用方法
在android开发中经常需要从接口服务器获取数据,然后展示在手机界面上。其中手机端和接口服务器之间通常使用json数据来进行通信。常用的解析场景如下:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceSt...转载 2018-09-21 06:37:38 · 3388 阅读 · 1 评论