gpt4 book ai didi

java - 使用 GSON 反序列化包含 JSON 的对象

转载 作者:搜寻专家 更新时间:2023-11-01 01:45:23 25 4
gpt4 key购买 nike

我正在使用 gson 从 JSON 表示中反序列化 POJO 对象。

我希望我的一个 POJO 中的字段之一包含任意 JSON 数据。例如:

class B {
public String stringField;
public JsonObject jsonField;
}

我希望能够对以下 JSON 调用 Gson.fromJson(json, B.class):

{
"stringField": "booger",
"jsonField" :
{
"arbitraryField1": "foo"
}
}

并让生成的 B.jsonField 包含一个 JsonObject,其 arbitraryField 的值为 foo

但是,当我尝试这样做时,jsonField 始终是一个空对象 ({})。事实上,更一般地说,似乎以下总是返回一个空对象:

new Gson().fromJson("{ foo: 1 }", JsonObject.class)

我希望上面的代码返回一个对象,该对象包含一个名为 foo 且值为 1 的字段。

在将json反序列化为POJOS时,如何让gson保留任意json数据?

最佳答案

我能够通过引入一个包含 JsonObject 的包装对象,然后为该对象编写一个只返回原始 json 的自定义反序列化程序来解决这个问题。但是,似乎必须有更好的方法。

对于后代,反序列化器和简单的包装器对象如下所示:

class MyJsonObjectWrapperDeserializer implements JsonDeserializer<MyJsonObjectWrapper> {
@Override
public MyJsonObjectWrapper deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new MyJsonObjectWrapper(json.getAsJsonObject());
}
}

class MyJsonObjectWrapper {
public JsonObject json;

public MyJsonObjectWrapper(JsonObject json) {
this.json = json;
}
}

关于java - 使用 GSON 反序列化包含 JSON 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com