Gson会使用List <pair <string,string =“” >>高兴地制作JSON,但如果列表在类中则不会

时间:2019-04-07 04:41:07

标签: json gson

就像我之前有很多人一样,我需要制作一个键,值对的“表”。可能有多个,我不需要排序。配对列表似乎是一个不错的选择,但现在我无法让GSon为包含它们的类正确创建JSON。

我可以寻找其他方式,但是现在我的好奇心激起了。

获取List<Pair<String, String>>的JSON没什么问题

@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"
}

同样,我可以寻找另一种存储机制,但是我很好奇这里出了什么问题。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试为TypeToken提供toJson,例如:

Type type = new TypeToken<Pair<String, String>>() {}.getType();

String json = new GsonBuilder().setPrettyPrinting().create().toJson(pairs, type);
System.out.println(json);

没有测试:)