Как сериализовать объект в список из одного элемента с помощью gson - PullRequest
0 голосов
/ 24 марта 2020

У меня есть строка json, подобная этой:

example1

{ "path":{ "start":"abc" }, "name":"Fork1" }

example2

{ "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 с одним объектом?

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я решил это, изменив 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);
    }
}
0 голосов
/ 24 марта 2020

Не думаю, что это хороший способ сериализации двух различных типов строк json с ONE объектом.

Например, объект 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 Объектов.

Еще одна вещь, если вы действительно хотите это сделать, Я думаю, вам нужно реализовать собственный десериализатор самостоятельно. Пожалуйста, подтвердите do c из Gson.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...