Как прочитать объект из файла JSON с Gson, когда есть HashMap в классе - PullRequest
0 голосов
/ 07 июля 2019

У меня есть класс, который имеет hashMap сам по себе, когда я получаю его файл json с библиотекой gson и хочу создать его снова, я получаю некоторые ошибки.

Я попытался создать объект снова с помощью gsonбиблиотека, но она не удалась.

class A{
    private HashMap<String, B> hashMap;
    private int x;
    private String y;
}
class B{/*some simple fields*/}
public static void main(String[] args){
    Gson gson = new GsonBuilder().create();
    A a = new A();
    /*setting fileds*/
    String json = gson.toJson(a);
    A newA = gson.fromJson(json, A.class);
}

например одна из обнаруженных мной ошибок:

Caused by: java.lang.IllegalStateException: Not a JSON Object: "Name : rostam - AP : 7 - HP : 55 - Class : HYBRID - Special power : "
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:91)
    at controller.AbstractClassAdapters.deserialize(AbstractClassAdapters.java:13)
    at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
    ... 52 more

Ответы [ 2 ]

2 голосов
/ 07 июля 2019

Вам необходимо предоставить строковое представление переданного объекта (здесь это A a) в метод fromJson . Попробуйте приведенный ниже код.

String json = gson.toJson(a);
A newA= gson.fromJson(json, A.class);
0 голосов
/ 08 июля 2019

Я думаю, что нашел решение.

Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();

Это сработало для меня.

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