您如何解析和访问时间戳并读取数组的 JsonArray?

How do you parse and access the timestamp and reading in a JsonArray of arrays?

我有一个包含数组 JsonArray 的 JsonObject。我想用 Gson 解析它。以下是数据的样子。我可以使用 JsonArray data = resourceObj.get("data").getAsJsonArray() 获取外部数组,但我不确定如何访问内部数组。我的理解是,要获得作为 JsonArray 的东西,它必须采用 "xyz": [ something] 或 "xyz"=[something]

的形式
{
    "sid": "123456",
    "data": [
    [
      1595808000,
      0
    ],
    [
      1595894400,
      0
    ],
    [
      1595980800,
      0.0829
    ],
    [
      1596067200,
      0.0047
    ]
  ],
}

data的值是数组的数组。

例如data[2][1] 的值为 0.0829.

内部数组的第二个值是什么,我不知道,但第一个值看起来是一个 Unix 时间戳。

例如值 1595980800Wednesday, July 29, 2020 12:00:00 AM GMT.

另外:如果你有一个字符串要解析,所以不使用实际的 JsonObject 并且具有如此稳定的 JSON 你可以声明一个包装数据 class 来使处理更方便并且可能更安全.

所以像这样:

@Getter
@Setter
public static class MyData {
    private Long sid;
    @SuppressWarnings("serial")
    public static class DataItem extends ArrayList<Object> {
        public LocalDateTime getSomeLocalDateTime() {
            return Instant
                .ofEpochSecond(((Double)get(0)).longValue())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        }
        public Double getSomeDouble() {
            return (Double)get(1);
        }
    }
    private List<DataItem> data; 
}

使用:

MyData myData = getGson().fromJson(json, MyData.class);
LocalDateTime ldt = myData.getData().get(0).getDate();
Double dbl = myData.getData().get(0).getSomeDouble();