GSON 假大写

发布于 2024-10-12 13:07:41 字数 108 浏览 2 评论 0原文

有没有办法让 GSON 将“False”识别为布尔值?

例如

gson.fromJson("False",Boolean.class)

Is there a way to get GSON to recognise "False" as a boolean?

e.g.

gson.fromJson("False",Boolean.class)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三寸金莲 2024-10-19 13:07:41

是的,您可以提供自己的反序列化器并执行您想要的任何操作:

public class JsonBooleanDeserializer implements JsonDeserializer<Boolean>{
    @Override
    public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {        
        try {
            String value = json.getAsJsonPrimitive().getAsString();
            return value.toLowerCase().equals("true");
        } catch (ClassCastException e) {
            throw new JsonParseException("Cannot parse json date '" + json.toString() + "'", e);
        }
    }
}

然后将此反序列化器添加到您的 GSON 解析器:

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Boolean.class, new JsonBooleanDeserializer());
Gson gson = builder.create();
gson.fromJson(result, Boolean.class);

GSON 需要以某种方式知道这是一个布尔值,因此它仅在您提供基类(Boolean.class)时才有效。
当您将整个值对象类放入其中并且其中有一个布尔值时,它也可以工作:

public class X{ boolean foo; } 将使用 JSON {foo: TrUe}

Yes, you can provide your own deserializer and do whatever you wish:

public class JsonBooleanDeserializer implements JsonDeserializer<Boolean>{
    @Override
    public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {        
        try {
            String value = json.getAsJsonPrimitive().getAsString();
            return value.toLowerCase().equals("true");
        } catch (ClassCastException e) {
            throw new JsonParseException("Cannot parse json date '" + json.toString() + "'", e);
        }
    }
}

you then add this Deserializer to your GSON parser:

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Boolean.class, new JsonBooleanDeserializer());
Gson gson = builder.create();
gson.fromJson(result, Boolean.class);

GSON needs to know somehow that this IS a boolean, so it only works when you provide the base class (Boolean.class).
It works too when you put your whole value object class into it and there is a boolean somewhere inside it:

public class X{ boolean foo; } will work with the JSON {foo: TrUe}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文