大约有十几个相关问题,但似乎没有一个适用于我的案例,所以我会问另一个问题。
我想使用 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/