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

ulydmbyx  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(148)

我有一个包含数组JsonArray的JsonObject。我想使用Gson解析它。下面是数据的样子。我可以使用JsonArray data = resourceObj.get("data").getAsJsonArray()来获取外部数组,但我不确定如何访问内部数组。我的理解是,要获取JsonArray形式的数据,它必须是“xyz”形式:[某事物]或“xyz”=[某事物]

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

tpxzln5u1#

data的值是数组的数组。
例如,data[2][1]的值为0.0829
内部数组的第二个值是什么,我不知道,但第一个值看起来像是Unix时间戳。
例如,值1595980800Wednesday, July 29, 2020 12:00:00 AM GMT

j2qf4p5b

j2qf4p5b2#

另外:如果您有一个字符串需要解析,因此不使用实际的JsonObject,并且具有这样一个稳定的JSON,则可以声明一个 Package 数据类,以使处理更方便,并且可能更安全。
所以是这样的:

@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();

相关问题