Gson от Json десериализовать - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть следующее json:

[
    {
        "": "",
        "substituted_restday": "2020-02-01",
        "original_restday": "2020-02-08",
        "id": "15d13f70-c0a852c0-3a925f13-6dca1982",
        "_UNIQUEKEY_": "15d1592a-c0a852c0-3a925f13b7c65023",
        "parentId": ""
    }, 
    {
        "": "",
        "substituted_restday": "2020-02-03",
        "original_restday": "2020-02-09",
        "id": "15d14d55-c0a852c0-3a925f13-727b70af",
        "_UNIQUEKEY_": "15d1592a-c0a852c0-3a925f13-3711a584",
        "parentId": ""
    }
]

Я хочу получить значения "subst_restday" и "original_restday" из JSON. Поэтому я использовал gson.from со следующим синтаксисом для согласования его в JAVA объект.

String[] str = gson.fromJson(JSON, String[].class);

Однако, он показал следующую ошибку:

com.google.gson.JsonParseException: The JsonDeserializer StringTypeAdapter failed to deserialize json object {"":"","substituted_restday":"2020-02-01","original_restday":"2020-02-08","id":"15d13f70-c0a852c0-3a925f13-6dca1982","_UNIQUEKEY_":"15d1592a-c0a852c0-3a925f13-b7c65023","parentId":""} given the type class java.lang.String

Итак, как я могу получить значение «subst_restday» и «original_restday» из JSON? Спасибо?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Древовидная структура

Gson может анализировать JSON в древовидную структуру, аналогично тому, как XML можно анализировать в DOM-дереве. Узлы дерева могут быть одним из этих подклассов JsonElement: JsonObject, JsonArray, JsonPrimitive и JsonNull.

, поскольку JSON начинается с [ Вы можете выполнить синтаксический анализ JsonArray следующим образом:

JsonArray root = gson.fromJson(JSON, JsonArray.class);
for (JsonElement elem : root) {
    JsonObject obj = elem.getAsJsonObject();
    String substituted_restday = obj.get("substituted_restday").getAsString();
    String original_restday = obj.get("original_restday").getAsString();
    System.out.printf("substituted_restday = '%s', original_restday = '%s'%n",
                      substituted_restday, original_restday);
}

Список карт

Gson может выполнить синтаксический анализ JSON объектов в Map.

List<Map<String, String>> root = gson.fromJson(JSON, new TypeToken<List<Map<String, String>>>() {}.getType());
for (Map<String, String> obj : root) {
    String substituted_restday = obj.get("substituted_restday");
    String original_restday = obj.get("original_restday");
    System.out.printf("substituted_restday = '%s', original_restday = '%s'%n",
                      substituted_restday, original_restday);
}

Массив POJO

Gson может анализировать объекты JSON в POJO. Это наиболее безопасный для обработки способ обработки данных.

MyObj[] root = gson.fromJson(JSON, MyObj[].class);
for (MyObj obj : root) {
    System.out.printf("substituted_restday = '%s', original_restday = '%s'%n",
                      obj.substitutedRestday, obj.originalRestday);
}
class MyObj {
    @SerializedName("")
    String blank;
    @SerializedName("substituted_restday")
    String substitutedRestday;
    @SerializedName("original_restday")
    String originalRestday;
    @SerializedName("id")
    String id;
    @SerializedName("_UNIQUEKEY_")
    String uniqueKey;
    @SerializedName("parentId")
    String parentId;
}

Скорее всего, вам понадобятся методы получения и установки в вашем POJO. Это просто упрощенный пример выполнения.


Вывод (из всех 3)

substituted_restday = '2020-02-01', original_restday = '2020-02-08'
substituted_restday = '2020-02-03', original_restday = '2020-02-09'
0 голосов
/ 05 февраля 2020
JsonObject jsonObject = gson.fromJson( JSON, JsonObject.class);

затем

jsonObject.get(substituted_restday); // returns a JsonElement for that name
jsonObject.get(original_restday); 

Imo, вы должны создать pojo для элемента json, а затем из метода Json вернуть массив этих pojo. Эта ссылка должна дать вам более подробную информацию - https://howtodoinjava.com/gson/gson-parse-json-array/

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