[英]How to serialize an object to a list of one elements with gson
我有一些这样的 json 字符串:
例子1
{ "path":{ "start":"abc" }, "name":"Fork1" }
例子2
{ "path":[{ "start":"abc" }, { "start":"def" }], "name":"Fork1" }
我想用这样的一个JAVA 对象进行序列化:
@Data
public static class ForkNode {
private List<Path> path;
private String name;
}
@Data
public static class Path {
private String start;
}
new Gson().fromJson(jsonStr, ForkNode.class)
但它会抛出异常IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 2 column 11 path $.path
那么如何将第一个示例视为一个元素的列表呢? 或者有什么方法可以用一个对象序列化两种不同类型的 json 字符串?
我认为用ONE对象序列化两种不同类型的 json 字符串不是一种好方法。
例如1,对象应该是这样的:
@Data
public static class ForkNode {
// only one path
private Path path;
private String name;
}
@Data
public static class Path {
private String start;
}
new Gson().fromJson(jsonStr, ForkNode.class)
而例如2,对象应该是这样的:
@Data
public static class ForkNode {
// several paths
private List<Path> path;
private String name;
}
@Data
public static class Path {
private String start;
}
new Gson().fromJson(jsonStr, ForkNode.class)
在 JSON 中:
还有一件事,如果你真的想这样做,我认为你需要自己实现一个自定义的反序列化器。 请参考 Gson 的文档。
我通过修改 JsonObject 解决了它。 我使用此代码将 JsonObject 转换为 JsonArray,因此我可以像 JsonArray 一样反序列化它。
public void objectToArray(JsonObject jsonObject, String node) {
JsonElement jsonElement = jsonObject.get(node);
if (jsonElement instanceof JsonObject) {
JsonArray array = new JsonArray();
array.add(jsonElement);
jsonObject.remove(node);
jsonObject.add(node, array);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.