【问题标题】:Create a json response containing array of array创建一个包含数组数组的 json 响应
【发布时间】:2020-02-26 22:11:46
【问题描述】:

需要回复

{
  "data" : [[1234, 55],[1264,45],[1334, 56]]
}

型号

Class Timeseries{
  private List<List<Integer>> data;
}

我觉得 List 的 List 不适合实现所需的 json 响应。但我无法用 List 替换它,其中 CustomObject 将包含 2 个整数成员变量。因为它将更改响应的格式并将响应作为包含 CustomObject 类型的对象列表而不是列表列表的数据发送..

请推荐一种替代方法

【问题讨论】:

  • 列表列表有什么问题?

标签: java jackson-databind fasterxml


【解决方案1】:

你可以这样试试,

class CustomObject {
    private int data1;
    private int data2;
    // getters & setters
}

然后你可以修改你的时间序列如下,

private List<CustomObject> data;

【讨论】:

  • 这不会让你得到[ { ... }, { ... }, ... ] 而不是想要的吗?
【解决方案2】:

达到所需输出的最简单方法是

class data extends ArrayList<List<Integer>> {
}

并使用此代码与 Jackson JSON 进行序列化

data ts = new data();
ts.addAll(Arrays.asList(Arrays.asList(1234, 55), Arrays.asList(1264, 45), Arrays.asList(1334, 56)));

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
String result = objectMapper.writeValueAsString(ts);

System.out.println(result);

输出字符串将根据您的需要{"data":[[1234,55],[1264,45],[1334,56]]}

但是,说真的,这里的正确方法是实现

class Timeseries {
    private List<List<Integer>> data;
}

您自己的com.fasterxml.jackson.databind.ser.std.StdSerializer&lt;T&gt; Timeseries 类的继任者。

更新:

找出最简单的方法来获取所需的类字符串

class Timeseries {
   public List<List<Integer>> data;
}

注意 data 字段必须是 public 或有一个 getter。

然后编码

Timeseries ts = new Timeseries();
ts.data = Arrays.asList(Arrays.asList(1234, 55), Arrays.asList(1264, 45), Arrays.asList(1334, 56));

ObjectMapper objectMapper = new ObjectMapper();
String result = objectMapper.writeValueAsString(ts);
System.out.println(result);

将打印{"data":[[1234,55],[1264,45],[1334,56]]}

【讨论】:

    【解决方案3】:

    您可以使用大小为 2 的数组列表。

    【讨论】:

      猜你喜欢
      • 2021-09-22
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 2021-01-27
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多