簡體   English   中英

如何使用gson將對象序列化為一個元素的列表

[英]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 中:

  • 對象直接用大括號括起來 {} 而 JSON
  • 在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM