使用索引项表示的集合生成 JSON

问题描述 投票:0回答:2

是否有一些库可以生成 JSON 对象,其中集合表示为一组编号的项目?

当使用例如 GSON 库并具有如下类时:

`class Bus {
    List<Passenger> passengers;

    public Bus(List<Passenger> passengers) {
        this.passengers = passengers;
    }
}`

GSON 生成 JSON 如下:

`{
    "bus":{
        "passengers":[
            {"name":"John","familiName":"Smith"},
            {"name":"Marry","familiName":"James"}
        ]
    }
}`

但是我要求生成 JSON,其中集合由每个都有其索引的项目表示。 像这样:

`{
    "bus":{
        "passengers[0]":{"name":"John","familiName":"Smith"},
        "passengers[1]":{"name":"Marry","familiName":"James"}
}}`

我深入研究了 GSON 和 FasterXML,但找不到对此功能的支持。 有谁知道是否有一些图书馆支持这个?

任何帮助表示赞赏。

java json gson fasterxml
2个回答
1
投票

您可以创建一个实现 JsonSerializer 的类来指定您希望如何序列化它。
然后在构建 Gson 时注册它: Gson gson = new GsonBuilder().registerTypeAdapter(Bus.class, new BusAdapter()).create();

更多信息:https://github.com/google/gson/blob/master/UserGuide.md#TOC-Writing-a-Serializer


1
投票

我认为您可以创建 Map 而不是 List (如果您不想编写自定义序列化器和反序列化器)。总线的构造函数将类似于:

private Map<String, Passenger> bus = new HashMap<>();

public Bus(List<Passenger> passengers) {
      for (int i = 0; i < passengers.size(); i++){
           bus.put("passengers["+i+"]", passengers.get(i));
      }
}

对于简单的乘客来说,只有名字看起来像

{
    "bus":
    {
      "passengers[0]":{"name":"first"},
      "passengers[1]":{"name":"second"}
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.