文档章节

GSON Empty Json Object to null

daveztong
 daveztong
发布于 2015/08/28 16:46
字数 250
阅读 112
收藏 0

Sometimes that API you are given just doesn't conform to what you are expecting.

I have had to consume a JSON API recently where the JSON returned "{}" instead of null or not at all.

For example, this is OK:

{
  "name": "Chris",
  "inner": null
}

Ommitting the inner field also OK:

{
  "name": "Chris"
}

But this is plain difficult:

{
  "name": "Chris",
  "inner": {}
}

For what ever reasons I want inner to parse to null.

This will parse empty JSON objects ({}) to null. Hope it helps!

The following snippet will use a new TypeAdapterFactory from GSON 2.2+.

/**
 * Created by Chris on 22/02/15.
 */
public class EmptyCheckTypeAdapterFactory implements TypeAdapterFactory {

    @Override public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
        // We filter out the EmptyCheckTypeAdapter as we need to check this for emptiness!
        if (InnerObject.class.isAssignableFrom(type.getRawType())) {
            final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
            final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
            return new EmptyCheckTypeAdapter<>(delegate, elementAdapter).nullSafe();
        }
        return null;
    }

    public static class EmptyCheckTypeAdapter<T> extends TypeAdapter<T> {

        private final TypeAdapter<T> delegate;
        private final TypeAdapter<JsonElement> elementAdapter;

        public EmptyCheckTypeAdapter(final TypeAdapter<T> delegate, 
                                     final TypeAdapter<JsonElement> elementAdapter) {
            this.delegate = delegate;
            this.elementAdapter = elementAdapter;
        }

        @Override public void write(final JsonWriter out, final T value) throws IOException {
            this.delegate.write(out, value);
        }

        @Override public T read(final JsonReader in) throws IOException {
            final JsonObject asJsonObject = elementAdapter.read(in).getAsJsonObject();
            if (asJsonObject.entrySet().isEmpty()) return null;
            return this.delegate.fromJsonTree(asJsonObject);
        }
    }

}

Then of course add this to your GSON Builder:

new GsonBuilder()  
            .registerTypeAdapterFactory(
                new EmptyCheckTypeAdapterFactory())
            .create();

Reference: google-gson/issues/detail/43

本文转载自:http://chrisjenx.com/gson-empty-json-to-null/

daveztong
粉丝 4
博文 93
码字总数 21482
作品 0
成都
程序员
私信 提问
Gson解析Json

Json(JavaScript Object Notation)是一种轻量级的数据交换格式,类似XML,但比XML更小更快更容易解析。当前各种流行的web应用框架都对Json提供良好的支持,各种流行开发语言也支持Json解析...

踏雪凌冰
2015/04/03
0
0
Gson格式转换Integer变为Double类型问题解决

问题描述 在前后端分离的开发模式下,前后端交互通常采用JSON格式数据.自然会涉及到json字符串与JAVA对象之间的转换。实现json字符串与Java对象相互转换的工具很多,常用的有Json、Gson、Fas...

明MikeWoo
2018/12/28
1K
2
Google的JSON类库 Gson开发者指南

由于 site.google.com 被墙,本人特意翻墙出去扒了分 User Guide 回来,不过是英文的。 Gson User Guide Contents 1 Authors: Inderjeet Singh, Joel Leitch 1.1 Overview 1.2 Goals for Gs......

红薯
2009/12/31
11.7K
13
GSON 解析json 无需在手动解析实体类

实体类的父类该类下 Json2bean 是把json转成实体类Json2ListBean 吧json转成 list GSON使用注意项 :json属性名和实体的属性名必须一致,不一致则赋值为空。 File Name:Bean.java Package Na...

tfc
2014/03/17
953
0
【Java】各个JSON技术的比较

一 、各个JSON技术的简介和优劣 1. json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括commons-beanutils.jar,commons-collectio...

鴿神丶
2016/07/22
136
0

没有更多内容

加载失败,请刷新页面

加载更多

[top]cpu内存

%Cpu(s): 96.0 us用户进程整理cpu的占比,按整个cpu算。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ......

Danni3
16分钟前
3
0
JavaScript权威指南笔记2

第二章、词法结构 1、字符集 JavaScript程序:Unicode字符集编写 Unicode:ASCII和Latin-1的超集,支持所有在用的语言。 ECMAScript 3要求JavaScript的实现必须支持Unicode 2.1及后续版本 EC...

_Somuns
24分钟前
4
0
数据安全管理:RSA算法,签名验签流程详解

本文源码:GitHub·点这里 || GitEE·点这里 一、RSA算法简介 1、加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用。可以在不直接传递密钥的情况下,完成加解密操...

知了一笑
今天
7
0
Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
今天
6
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部