阻止 GSON 序列化 JSON 字符串

2024-01-26

我是 gson 的新手,并且有一个尚未找到答案的新手问题,所以请耐心等待。 StackOverflow 和 google 不是我的朋友:(

我有一个 java 类“User”,其属性之一“externalProfile”是一个包含已序列化 JSON 的 Java 字符串。当 gson 序列化 User 对象时,它将把 externalProfile 视为原始类型,从而转义 JSON,添加额外的斜杠等。 我希望 gson 保留该字符串,只“按原样”使用它,因为它已经是有效且可用的 JSON。

为了区分 JSON 字符串,我创建了一个名为 JSONString 的简单类,并且尝试使用读取器/写入器、registerTypeAdapter,但没有任何效果。 你能帮我吗?

public class User {
    private JSONString externalProfile;
    public void setExternalProfile(JSONString externalProfile) { this.externalProfile = externalProfile; }

}

public final class JSONString {
    private String simpleString;
    public JSONString(String simpleString) { this.simpleString = simpleString; }
}

public customJsonBuilder(Object object) {
    GsonBuilder builder = new GsonBuilder();
        builder.registerTypeAdapter(GregorianCalendar.class, new JsonSerializer<GregorianCalendar>() {
            public JsonElement serialize(GregorianCalendar src, Type type, JsonSerializationContext context) {
                if (src == null) {
                    return null;
                }
                return new JsonPrimitive(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(src.getTime()));
            }
        });
        Gson gson = builder.create();
        return gson.toJson(object);
}

例如,externalProfile 将保存(作为字符串值):

{"profile":{"registrationNumber": 11111}}

将其作为 JSONString 存储在 User 对象中后,我们将用户对象转换为 JSON:

User user = new User();
user.setExternalProfile(new JSONString(externalProfile)),  
String json = customJsonBuilder(user);

json 将包含类似以下内容:

{\"profile\":{\"registrationNumber\": 11111}}

因此,externalProfile JSONString 由 gson 序列化为 String 原语,并在双引号前面添加了额外的斜杠。 我希望 gson 保持这个 JSONString 不变,因为它已经是可用的 JSON。 我正在寻找类型适配器/读写器来执行此操作,但我无法让它工作。


正如 Alexis C 所说:

首先将 externalProfile 存储为 JsonObject:

new Gson().fromJson(externalProfile, JsonObject.class));

并让gson在输出User对象时再次序列化这个。 将生成完全相同的 JSON!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阻止 GSON 序列化 JSON 字符串 的相关文章

随机推荐

  • 如何获取 Solr 文档的大小?

    我想知道各个 Solr 文档 响应的大小 以字节为单位 有没有一种简单的方法可以解决这个问题 我们正在使用 solrj java 客户端 我环顾四周 只找到了确定索引大小的方法 但没有找到确定文档本身大小的方法 solr 的大小和文档由两者
  • 即使没有引用,表中的字段数量也会影响性能吗?

    我正在读取 CSV 文件并将其解析到 SQL Server 2008 数据库中 此过程对所有文件使用通用 CSV 解析器 CSV 解析器将解析的字段放入通用字段导入表 F001 VARCHAR MAX NULL F002 VARCHAR M
  • numpy.sort() 错误 ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

    当我使用numpy对数组进行排序 出现这个问题 Traceback most recent call last File D Desktop LIP complier num f t py line 75 in
  • 使用擦除和插入替换向量中的元素

    void replace vector
  • 在 swift 上重写 NSObject 中的描述方法

    当我尝试在 xcode 项目中构建一个对象时 出现一个编译器错误 这是代码 import UIKit class Rectangulo NSObject var ladoA Int var ladoB Int var area Int ge
  • android中httppost和httpget方法的区别? [复制]

    这个问题在这里已经有答案了 谁能告诉我两者之间的区别Httpost and Httpget method Httpclient可以执行POST和GET方法 请解释一下方法1和方法2的区别 1 httpclient execute httpp
  • 如何在 Symfony 2 中为数据库视图设置实体(学说)

    假设我有一个视图表 我想将数据从它获取到一个实体 我可以 以及如何 创建实体类来执行此操作 不需要保存操作 我只是想展示它们 接受的答案是正确的 但我想提供一些您可能需要考虑的其他建议 将您的实体标记为只读 将构造函数设为私有 以便只有 D
  • 如何让Android Webview背景透明在KITKAT(4.4)

    最近 我在Android上实现了基于Web的应用程序 我想让webview背景颜色透明的 搜索后 我发现 Webview 有两行 newWebView setBackgroundColor 0x00000000 newWebView set
  • 无法与 PayPal 服务器通信

    Update hideCreditCardButton在这个问题上没有任何作用 这只是一个巧合 当我在没有信用卡的情况下尝试它时 它对我有用 但情况不再是这样了 我确实工作 但只有 20 30 的时间 我正在使用 PayPal iOS SD
  • wait Task.Delay() 延迟的时间比预期的要长

    我有一个大量使用 Net 任务的 Windows 服务应用程序 我对它们有很好的了解 但我不是专业人士 并且遇到了问题 我有一种情况 我的await Task Delay 有时需要比应有的时间长得多 最多长 60 秒 我确信这是由于我正在做
  • 如何在非 GUI 应用程序中使用 QWebPage

    我想用QWebPage在非 GUI Qt 应用程序中 我的意思是我根本不想与窗口服务器通信 不过 使用 QtGui 不是问题 QWebPage内部创建一些QWidget实例 因此 使用QCoreApplication不可能 当创建一个QAp
  • 包含多个 Chart.js 图表的 pdf 页面

    我使用 Chart js 生成一个包含多个图表的报告页面 我需要将此报告导出为 PDF 通过搜索可以找到许多解决方案 但我找不到具有多个画布元素的解决方案 唯一可用的解决方案似乎是循环遍历所有图像 并使用图像重新创建报告 然后将其下载为 p
  • onKey onKeyDown 不起作用

    我正在尝试在我的 Android 应用程序中注册方向键 电视遥控器方向键点击 我目前正在使用 Android 模拟器进行测试 并尝试在额外设置菜单下使用方向键输入进行单击 但我不确定为什么这不起作用 任何帮助将不胜感激 public cla
  • 如何使用 Java 复制文件并将其粘贴到剪贴板?

    如何使用 Java 复制文件并将其粘贴到剪贴板 我的程序可以复制但不能粘贴 它给 线程 main 中的异常 java lang ClassCastException java util Arrays ArrayList 无法转换为 java
  • Plotly.js - gd.data 必须是一个数组

    我正在使用 Plotly js 库来绘制 3D 图形 我的计划是将 4 条迹线绘制到一张 3D 图中 但是当我尝试这样做时 我的网站遇到了一些奇怪的行为 有时 当我加载网站时 我没有收到任何错误 并且所有 4 条轨迹都完美加载到我的 3D
  • 将 GWT 应用程序部署为单个 JavaScript 文件

    GWT 应用程序的已编译 JavaScript 输出分为不同的文件 例如 缓存 html gwt rpc 托管 html nocache js 我知道这样做的目的是最小化必须由用户下载的 JavaScript 的大小 例如 Firefox
  • 更新表插入 VARBINARY 数据

    当我运行 sql 查询时 我得到如下信息 不允许从数据类型 varchar 到数据类型的隐式转换 varbinary 使用 CONVERT 函数运行此查询 严重程度 16 我想要插入的数据看起来像 000012000000000000100
  • 如何使用 Windows 任务计划程序自动执行 PowerShell 脚本?

    我有一个发送电子邮件的 PowerShell 脚本 我想每 1 分钟自动执行一次该脚本 我该如何使用任务计划程序来做到这一点 目前我已经创建了一个任务并提供了脚本的路径 但是该调度程序打开我的脚本 而不是执行 我使用的是 Windows 7
  • JDK8 是 JBoss 6 AS 支持的平台吗

    我们正在将应用程序 java 平台升级到最新的稳定平台 并且我们正在使用 Jboss 6 AS Is 甲骨文JDK8JBoss 6 AS 支持的平台 不 它不会起作用 JBoss AS 6和 7 不兼容Oracle JDK 1 8 您需要下
  • 阻止 GSON 序列化 JSON 字符串

    我是 gson 的新手 并且有一个尚未找到答案的新手问题 所以请耐心等待 StackOverflow 和 google 不是我的朋友 我有一个 java 类 User 其属性之一 externalProfile 是一个包含已序列化 JSON