您如何解析和访问时间戳并读取数组的 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 时间戳。
例如值 1595980800
是 Wednesday, 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();
我有一个包含数组 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 时间戳。
例如值 1595980800
是 Wednesday, 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();