Как сериализовать картуиспользуя gson? - PullRequest
0 голосов
/ 03 октября 2019

У меня проблемы с gson. Когда я вызываю метод toJson (), он выдает StackOverflowError, что бы я ни делал.

Вот фрагмент кода, который я пытаюсь.

private Map<String, ArrayList<Integer>> mMap = new HashMap<String, ArrayList<Integer>>() {{
    put("KEY_A", new ArrayList<Integer>( Arrays.asList(1,2,3)));
    put("KEY_B", new ArrayList<Integer>( Arrays.asList(1,3,5)));
    put("KEY_C", new ArrayList<Integer>( Arrays.asList(1,2,3)));
}};
Gson gson = new Gson();
public String getString() {
    return gson.toJson(mMap);
}

Я пытался указать аргумент типа при вызове метода toJson (), например::

Type type = new TypeToken<Map<String, Object>>(){}.getType();
public String getString() {
    return gson.toJson(mMap, type);
}

и пробовал другую конфигурацию типа, такую ​​как:

Type type = new TypeToken<Map<String, ArrayList<Integer>>>(){}.getType();
// Object -> ArrayList<Integer>

, но не работал вообще.

Любой комментарий будет высоко оценен. Спасибо!

1 Ответ

0 голосов
/ 03 октября 2019

Вы можете включить сложную сериализацию ключа карты, используя объект GsonBuilder. Вот рабочий пример:

Map<String, ArrayList<Integer>> mMap = new HashMap<String, ArrayList<Integer>>() {
    {
        put("KEY_A", new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
        put("KEY_B", new ArrayList<Integer>(Arrays.asList(1, 3, 5)));
        put("KEY_C", new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
    }
};
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.enableComplexMapKeySerialization().setPrettyPrinting().create();
Type type = new TypeToken<HashMap<String, ArrayList<Integer>>>(){}.getType();
System.out.println(gson.toJson(mMap, type));

Распечатывает вывод:

{
  "KEY_A": [
    1,
    2,
    3
  ],
  "KEY_C": [
    1,
    2,
    3
  ],
  "KEY_B": [
    1,
    3,
    5
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...