gpt4 book ai didi

java - 反序列化可以是整数或字符串的值

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:10 24 4
gpt4 key购买 nike

我正在使用一个遗留系统,该系统可以具有如下所示的 JSON:

{"gauge": 1.0}
// or
{"gauge": "1.0-2.0"}

也就是说,gauge 可以是整数,也可以是字符串。我希望能够序列化和反序列化相同类型的值。

起初,我以为我可以简单地为此创建一个适配器:

public class Capabilities {
private Range gauge;
}
public class Range {
private int value;
private String range;
private boolean isRange;

public Range(int value) {
this.value = value;
this.isRange = false;
}

public Range(String value) {
this.range = range;
this.isRange = true;
}

public boolean isRange() {
return this.isRange;
}

public int getValue() {
return this.value;
}

public String getRange() {
return this.range;
}
}

然后我有 RangeTypeAdapter ,它可以根据需要使用 int/String 值创建 Range

但是,当我运行 gson.fromJson(str, Capability.class) 时,我得到:

Expected BEGIN_OBJECT but was STRING

我已经确定这是因为 strgauge 的值用双引号括起来,并且 gauge 应该是 RangeString 以外的任何内容,这意味着它希望它是一个对象。

有什么方法可以让 Gson 期待特定类的 STRING 吗?此外,是否有更好的方法来处理原始类型中可能存在的差异?

最佳答案

我不知道 Gson API 是否提供了一种方法来执行此操作,但一个选项是尝试一次转换,如果失败,则尝试第二次转换。我的意思是拥有一个包含 gauge 作为 int 字段的 GaugeInt 类。还有另一个类 GaugeString,它具有 gauge 作为 String 字段。现在我们可以尝试使用 GaugeInt.class 进行第一次转换;如果这导致异常,我们将尝试使用 GaugeInt.class 进行第二次转换。

关于java - 反序列化可以是整数或字符串的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30104339/

24 4 0
文章推荐: javascript - 如何使用 jQuery(仅限 Firefox 问题)通过所有 旋转