gpt4 book ai didi

java - 使用 GSON 将 JSON 数组字段转换为类对象

转载 作者:行者123 更新时间:2023-12-02 01:14:14 25 4
gpt4 key购买 nike

大约有十几个相关问题,但似乎没有一个适用于我的案例,所以我会问另一个问题。

我想使用 GSON 将 JSON 中的数组字段转换为 Java 类。

转换此:

{ ...
coordinates: [1,2,3],
...
}

对此:

class MyData {
...
@SerializedName("coordinates")
final @NonNull Coordinates coordinates;
...
}

class Coordinates {
final float x;
final float y;
final float z;

Coordinates(float x, float y, float z) {
this.x = x;
this.y = y;
this.z = z;
}
}

我尝试使用 JsonDeserializer<Coordinates>但我收到以下错误:

JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 485 path $.data[0].placements[0].coordinates

我可以使用

class MyData {
...
@SerializedName("coordinates")
final @NonNull List<Float> coordinates;
...
}

但是我需要手动构建 Coordinates类。

最佳答案

您的Cooperatives类中需要一个构造函数:

Coordinates(float x, float y, float z) {
this.x = x;
this.y = y;
this.z = z;
}

和解串器:

private static final JsonDeserializer<Coordinates> COORDINATES_DESERIALIZER
= (je, type, jdc) -> {
if (je.isJsonArray()) {
JsonArray arr = (JsonArray)je;
return new Coordinates(
arr.get(0).getAsFloat(),
arr.get(1).getAsFloat(),
arr.get(2).getAsFloat());
} else if (je.isJsonObject()) {
JsonObject obj = (JsonObject)je;
return new Coordinates(
obj.get("x").getAsFloat(),
obj.get("y").getAsFloat(),
obj.get("z").getAsFloat());
}
return null;
};

需要在您的 Gson 对象中注册:

private static final Gson GSON = new GsonBuilder()
.registerTypeAdapter(Coordinates.class, COORDINATES_DESERIALIZER)
.create();

关于java - 使用 GSON 将 JSON 数组字段转换为类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57669094/

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