gson:将 null 视为空字符串

2024-04-13

I use 谷歌-gson http://code.google.com/p/google-gson/将 Java 映射序列化为 JSON 字符串。它提供构建器处理空值 https://sites.google.com/site/gson/gson-user-guide#TOC-Null-Object-Support:

Gson gson = new GsonBuilder().serializeNulls().create();

问题是结果是字符串null, as in:

gson.toJson(categoriesMap));
{"111111111":null}

而所需的结果是:

{"111111111":""}

我可以做一个字符串替换null and "",但这很难看并且容易出错。是否有原生 gson 支持添加自定义字符串而不是null?


上面的答案对于序列化来说是没问题的,但是在反序列化时,如果有一个字段为空值,Gson会跳过它并且不会进入类型适配器的反序列化方法,因此你需要注册一个TypeAdapterFactory并返回类型适配器它。

Gson gson = GsonBuilder().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();


public static class NullStringToEmptyAdapterFactory<T> implements TypeAdapterFactory {
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {

        Class<T> rawType = (Class<T>) type.getRawType();
        if (rawType != String.class) {
            return null;
        }
        return (TypeAdapter<T>) new StringAdapter();
    }
}

public static class StringAdapter extends TypeAdapter<String> {
    public String read(JsonReader reader) throws IOException {
        if (reader.peek() == JsonToken.NULL) {
            reader.nextNull();
            return "";
        }
        return reader.nextString();
    }
    public void write(JsonWriter writer, String value) throws IOException {
        if (value == null) {
            writer.nullValue();
            return;
        }
        writer.value(value);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gson:将 null 视为空字符串 的相关文章

  • Python 3 中的递归搜索 JSON/DICT

    我在 Python 3 中实现了一些 API 这些 API 允许我根据班级代码接收有关学校的信息 但我想知道如何通过类代码获取信息 例子 我输入代码GF528S我希望程序告诉我班级 3C INF 地址 Address 1 Milan 如果可
  • 使用 TStringList 的分隔符解析字符串,似乎也解析空格(Delphi)

    我有一个简单的字符串 由某个字符分隔 比如说逗号 我应该能够创建一个 TStringList 并将其分隔符设置为逗号 然后将 DelimitedText 设置为我想要解析的文本 并且应该自动解析它 问题是 当我查看输出时 它还包含空格作为分
  • jq - 按值排序

    我有以下结构 ID XX guid 1 ID YY guid 2 我尝试过运行 jq sort by guid conn json 但是我收到一个错误 Cannot index string with string guid 请您告诉我如何
  • Foreach Ajax Json - Jquery

    谁能帮我 我有一个数组 stars Chris Pine Keira Knightley Kevin Costner 我想做的是 foreach star 我想将输入附加到 div 和 foreach star 它们在输入中具有值 这就是我
  • Jackson JSON + Java 泛型

    我正在尝试将以下 JSON 反序列化 映射到List
  • 如何使用放心的方式在正文中发送 JsonObject 以进行 post 请求?

    我有一个使用 Google Gson 创建的 JsonObject JsonObject jsonObj gson fromJson response1 json JsonElement class getAsJsonObject 我还对现
  • 使用把手显示来自 parse.com 的 json 响应

    我想将 json 响应传递给车把 我已经查看了解析文档和 stackoverflow 问题 但我似乎无法弄清楚这一点 这是回应 results address 755 W Yale createdAt 2013 02 09T01 12 15
  • 如何向我的 Spring MVC REST 服务添加错误?

    如果用户没有输入我正在编码的两个名称 我如何更改 更新来自 Spring MVC 的以下 REST 调用以返回错误 未找到 RequestMapping value name method RequestMethod GET Respons
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • OSError: [Errno 22] 当我尝试 .read() json 文件时

    我只是想用 Python 读取我的 json 文件 当我这样做时 我位于正确的文件夹中 我在 下载 中 我的文件名为 Books 5 json 但是 当我尝试使用 read 函数时 出现错误 OSError Errno 22 Invalid
  • 使用 ActiveAndroid 库存储 HashMap

    我有一堂课 Table name Control public class Control extends Model Column private String name Column private Map
  • 将 Laravel 集合/数组转换为 Javascript 数组

    我想将 Laravel 中的数组分配给 JavaScript 数组 我已经从我的AppServiceProvider和 json decoded 它像 View composer function view users Users all
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • python 3 argparse 调用函数

    我想在 python3 中创建一个类似命令行 类似 shell 的界面 Argparse 似乎负责解析和显示帮助 错误消息 根据argparse 的 python3 文档 https docs python org 3 5 library
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id
  • 将 Java 字符串转换为 sql.Timestamp

    收到以下格式的字符串 YYYY MM DD HH MM SS NNNNNN 时间戳来自 DB2 数据库 我需要将其解析为 java sql Timestamp 并且不丢失任何精度 到目前为止 我一直无法找到现有的代码来解析远至微秒的数据 S
  • Angular 4 显示其中的数据

    我不喜欢从 API 返回到我的 Angular 4 应用程序的数据 这是 JSON 的示例 我不关心美元 但这是我正在处理的数据类型 最终目标是在页面上展示 Coin Price BTC 4 281 28 ETH 294 62 etc JS
  • DbGeography 多边形到 JSON

    我将 DbGeography 多边形存储在数据库中 我的控制器从数据库获取多边形 我需要将它们转换为 JSON var polygons db Areas Where x gt x Type type Select x gt new Vie
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一

随机推荐

  • Perl 字符串是不可变的吗?

    当我对字符串进行串联时 幕后发生了什么 my short short short cake Perl 是否有效地创建一个新字符串 然后为其分配正确的变量引用 或者 Perl 字符串本质上总是可变的 这个问题的动机来自我与一位同事的讨论 他说
  • 模板构造函数优先于普通复制和移动构造函数?

    以下程序的输出 include
  • 如何检查 VBA DAO 记录集中是否为空?

    我在数据库中有一个可选字段 我正在使用 DAO 记录集提取该字段 在将字段与其他字段连接之前 我需要检查该字段是否已设置 到目前为止 我已经尝试过以下代码片段Is and 这是明显错误的语法 Is 无济于事 看来如果我使用 它不会正确地与N
  • 添加资源文件到VC6 dll

    我有许多 VC 6 0 项目 DSP 它们构建到没有资源文件的 dll 中 知道如何将资源添加到现有项目中吗 该项目很快就会发布一个主要版本 我想为那些目前缺少的 dll 添加一个文件版本 dll 将在发布之前重新编译 因此我只是尝试使这些
  • Active Directory 是否支持事务?

    简单的问题 但我在任何地方都找不到答案 Active Directory 是否支持事务 换句话说 以下更改是否会回滚 因为我没有调用scope Complete using var scope new TransactionScope Di
  • 是否可以定义一个符合协议的Class类型的属性?

    例如 我有MyFancyData协议 如何指定 MyFancyDataClass 属性仅接受符合此协议的类 interface MyObject NSObject property Class MyFancyDataClass proper
  • 头文件中的内存分配

    我工作的公司有针对嵌入式目标的 C 开发的开发规则 一是 建议不要在头文件中分配任何存储空间 我不确定这意味着什么 写它的人不在身边 其他开发人员也不在乎 所以我在这里问 我的理解是 我不应该在头文件中声明变量 因此在 h 中不鼓励类似的操
  • 使用 caseInSensitive 在 Firebase 中保存和/或查询用户显示名称?

    我正在将我的项目从 Swift 转移到 Firebase Firebase 用户没有用户名 但我允许他们保存显示名称 该名称更像是属性而不是实际对象 如何让用户在敏感文本中使用大小写来查询其他用户 朋友 您可以轻松完成此任务 我们不知道您当
  • 如何缓存 sbt TaskKey 的结果?

    我有一项昂贵的任务需要在测试中参考 lazy val exampleSources TaskKey Seq File exampleSources for use in tests exampleSources updateClassifi
  • 空指针与悬挂指针

    空指针和悬空指针之间有有意义的区别吗 看起来这两个术语都用于表示不指向任何内容的指针 是一个悬空指针的想法used引用某些东西 但现在没有 其中空指针只是一个不引用任何东西的指针 无论它过去指向什么 指针术语 悬空 或野 指针 指向某处的指
  • 如何发光最小。最大和关闭按钮?

    我按照以下指南使用 DWM API 创建自定义 Aero 框架 My work void CMainFrame OnActivate UINT nState CWnd pWndOther BOOL bMinimized CFrameWnd
  • 将数据库与 Elastic beanstalk 一起使用

    我一直在尝试在 AWS 上部署基于 Django 的问卷应用程序 就此而言 我对 AWS 和 Web 应用程序完全陌生 当我构建我的应用程序时 它在本地服务器上运行良好 我在 settings py 中使用了它 DATABASES defa
  • 在后台执行 Laravel/Symfony/Artisan 命令

    我需要在后台执行 Laravel 长时间运行的进程来使用 Twitter Streaming API 实际上 我需要运行的 php artisan CLI 命令是 nohup php artisan startStreaming gt de
  • 如何从 Django/postgreSQL 数据库中获取一个随机项目?

    所以我得到了database objects all 和database objects get name 但是我如何从数据库中获取一个随机项目 我无法弄清楚如何获得它并选择一个随机项目 从所有数据库对象的列表中选择随机元素并不是一个好的解
  • Sass 是连接而不是添加? [复制]

    这个问题在这里已经有答案了 我需要在 SCSS 代码中定义宽度 如下所示 example width currentWidth 349 important Where currentWidth由循环定义 然而 Sass 最终总是连接两个数字
  • Mac OSX:使用 dtruss?

    我正在尝试在 Mac OSX Catalina 中 dtruss 进程 但是 dtrace 报告错误 sudo dtruss whoami dtrace system integrity protection is on some feat
  • 如何调试 lxml.etree.XSLTParseError:无效的表达式错误

    我试图找出为什么 lxml 无法解析由带有各种内容的 根 文档组成的 XSL 文档xml includes 我收到错误 Traceback most recent call last File s py line 10 in
  • 使用 skimage 从多边形中提取图像片段

    我想获得通过剪切图像内的多边形而产生的子图像 我在 skimage 中有一个图像 在 matplotlib patches 中有一个多边形 怎么做 以下是我尝试过的 我不一定在寻找类似于下面的方法 我正在寻找最干净 最有效的实现 使用此代码
  • 如何卸载所有 Bower 软件包?

    有时 重建整个站点并强制 Bower 重新安装 Bower json 中所有软件包的新版本很有用 但是 似乎没有任何方法可以做到这一点 尝试 1 bower uninstall bower not installed 0 不 这只能在逐个包
  • gson:将 null 视为空字符串

    I use 谷歌 gson http code google com p google gson 将 Java 映射序列化为 JSON 字符串 它提供构建器处理空值 https sites google com site gson gson