Как и многие другие до меня, мне нужно составить «таблицу» пар ключ-значение. Там может быть много разных, и мне не нужно сортировать. Список пар казался хорошим выбором, но теперь я не могу заставить GSon правильно создать JSON для класса, который их содержит.
Я мог бы искать другие пути, но теперь мое любопытство задето.
Нет проблем получить JSON за List<Pair<String, String>>
@Test
void listOfPairs() {
List<Pair<String, String>> pairs = new ArrayList<>();
pairs.add(new ImmutablePair<>("Test1", "Has Value1"));
pairs.add(new ImmutablePair<>("Test1", "Has Value2"));
pairs.add(new ImmutablePair<>("Test2", "Has Value2"));
String json = new GsonBuilder().setPrettyPrinting().create().toJson(pairs);
System.out.println(json);
}
Запуск этого «теста» предоставляет красивый пышный объект JSON:
[
{
"left": "Test1",
"right": "Has Value1"
},
{
"left": "Test1",
"right": "Has Value2"
},
{
"left": "Test2",
"right": "Has Value2"
}
]
Но когда List<Pair<String, String>>
является членом класса, это не так уж и много.
class Thing {
private List<Pair<String, String>> pairs = new ArrayList<>();
private String thingName = "Benjamin Jacob Grimm";
Thing() {
pairs.add(new ImmutablePair<>("One", "1"));
pairs.add(new MutablePair<>("Two", "1"));
pairs.add(new ImmutablePair<>("Two", "2"));
}
}
@Test
void thingTest() {
Thing thing = new Thing();
String json = new GsonBuilder().setPrettyPrinting().create().toJson(thing);
System.out.println(json);
}
Теперь ответ совершенно не пышный! :
{
"pairs": [
{},
{},
{}
],
"thingName": "Benjamin Jacob Grimm"
}
Опять же, я мог бы искать другой механизм хранения, но мне наверняка любопытно, что здесь не так. У кого-нибудь есть мысли?