gpt4 book ai didi

java - 为 json 构建优化类型检查/转换

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:02 24 4
gpt4 key购买 nike

我正在做一个项目,我们使用 javax.json 来处理我们的请求/响应。我们使用的实现是 org.glassfish.json。困扰我的是它不支持添加/写入Object。所以我创建了方法,我必须在其中检查此实现支持的每种类型。像这样:

private static void addTypeSafeValue(JsonObjectBuilder jsonBuilder, String key, Object value) {
if (value instanceof String) {
jsonBuilder.add(key, value.toString());
} else if (value instanceof Integer) {
jsonBuilder.add(key, (int) value);
} else if (value instanceof Boolean) {
jsonBuilder.add(key, (boolean) value);
} else if (value instanceof Long) {
jsonBuilder.add(key, (long) value);
} else if (value instanceof Double) {
jsonBuilder.add(key, (double) value);
} else if (value instanceof Uri) {
jsonBuilder.add(key, ((Uri) value).toString());
} else if (value instanceof Map) {
jsonBuilder.add(key, convertToJsonObject((Map<String, ?>) value));
} else if (value instanceof Collection) {
jsonBuilder.add(key, convertToJsonArray((Collection<?>) value));
} else if (value instanceof JsonObject) {
jsonBuilder.add(key, (JsonObject) value);
} else if (value instanceof JsonArray) {
jsonBuilder.add(key, (JsonArray) value);
} else {
throw new IllegalArgumentException("Not implemented for: " + value.getClass());
}
}

我想知道,是否有任何方法可以优化这段代码。另一部分是我想为消费者传递 JsonObjectBuilderJsonGenerator 以减少一些重复的检查/代码。

最佳答案

TL;DR 它很好。


关于优化,请注意,您正在将所有内容添加到构建器(我猜)构建器中,而您可能需要 String甚至是 byte[]将通过电线发送。

最近,我在某处读到 Gson 通常花在复制字符串上的时间比做反射要多得多。所以我不太在乎。

What's bugging me is that it does not support adding/writing of Object.

如果他们愿意,那么他们将不得不像您一样提供一个不完整的解决方案(这对您来说很好,但不适合图书馆)或者使其可扩展,然后 Jackson、Gson 和许多其他人已经有了。

I am wondering, if there is any way to optimize this code.

我可以想到两种方法,但都不推荐:

1:找一些分组,让case的个数变小。你可以测试 value instanceof Number然后进一步分支。然而,几乎没有任何收获,因为数字肯定比其余情况更常见。

2:创建一个Map<Class, Consumer<Object>>为您的案例填充转换器并使用类似的东西

map.get(value.getClass()).accept(value);

当案例数量巨大或您需要可扩展性时,这可能是一个很好的解决方案。对于您的 10 个案例,它很可能会导致大幅放缓。

The other part is that I want to pass JsonObjectBuilder or JsonGenerator for consumer in order to cut some duplicated checks/code.

我不认为这是值得的。 JsonObjectBuilderJsonGenerator是两个不相关的接口(interface)。他们都有一堆方法,这些方法是相关的,但名称不同,并不总是相互对应。因此,您需要为它们编写包装器或像您的问题中那样重复代码。最后,无论如何,您都会得到一些重复的代码。

而且会很丑。我建议看看更强大的工具,如 Gson 或 Jackson 或其他。

关于java - 为 json 构建优化类型检查/转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37259188/

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