java - 反序列化一个值,可以是数组或原子

标签 java json gson

我正在使用 Gson,并希望将以下 JSON 替代方案反序列化到同一类 Values 中。在后一种情况下,我想接收一个仅包含一个元素的 List 。有没有一种方法可以在 Gson 中完成此任务,而无需编写自定义反序列化器?

//Array:
{
  "Value": [205.4, 13.5]
}

//Single value:
{
  "Value": 205.4
}

将两者反序列化为:

public static class Values {
      private List<Double> Value;
}

最佳答案

除非使用自定义 TypeAdapter,否则在 Gson 中无法执行此操作.

public class AwesomeType extends ArrayList<Double> {
    ...
}

public class AwesomeTypeAdapter extends TypeAdapter<AwesomeType> {
    @Override
    public void write(JsonWriter out, AwesomeType value) throws IOException {
        ...
    }

    @Override
    public AwesomeType read(JsonReader in) throws IOException {
        AwesomeType result = new AwesomeType();
        if (in.peek() == JsonToken.BEGIN_ARRAY) {
            in.beginArray();
            while (in.peek() != JsonToken.END_ARRAY)
                result.add(in.nextDouble());
            in.endArray();
        } else {
            result.add(in.nextDouble());
        }
        return result;
    }
}

将此类型适配器注册到您的 Gson 并在您的模型中使用此类而不是 List<Double> .

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

相关文章:

android - 我得到的 JSON 错误的含义

java - 如何在不知道 .class 先验的情况下使用 Gson 在 Java 中反序列化和返回 JSON 中的对象?

java - 具有 Synthetica Aluoxy 外观和感觉的 jxdatepicker 无法正常工作

java - 如何为我的应用程序使用 geoserver 的用户管理

java - 有点迷路…… jackson 反序列化

javascript - JSON 对象返回但无法通过 $.ajax() 访问

java - 如何阻止 Maven 在每次项目运行时解包

java - 处理扭矩时如何正确定义项目结构

java - 为什么gson在序列化java.time.ZoneId的时候要找java.time.ZoneRegion?

android - 在 Sharedpreferences 中使用 GSON 存储对象。你怎么认为?