3 回答
TA贡献1836条经验 获得超4个赞
假设您需要数组的第一个元素,您可以执行以下操作(知道这DATA是您提供的 JSon 字符串):
Map<String, JsonElement> resultMap;
Gson gson = new Gson();
Type type = new TypeToken<Map<String, JsonElement>>() {}.getType();
JsonElement jsonElement = gson.fromJson(DATA, JsonElement.class);
resultMap = gson.fromJson(jsonElement.toString(), type);
JsonArray details = resultMap.get("Details").getAsJsonArray();
JsonObject recordElement = details.get(0).getAsJsonObject();
System.out.println(recordElement.get("Id").getAsString());
所有这一切都是将Details数组作为 aJsonArray获取,然后获取Id元素的值。
由于您似乎正在处理 UUID,因此您可能会受益于使用:
UUID uuid = UUID.fromString(recordElement.get("Id").getAsString());
TA贡献1936条经验 获得超7个赞
在您的 JSONDetails中是一个列表或一个数组。所以在某些情况下不只有一个 id,你也应该为此做好准备。
创建DTO来描述数据通常也是一个好习惯,比如下面两个类:
数据
@Getter
public class Data {
// Recommendation, in Java field name should start lower case
@SerializedName("Details")
List<Detail> details; // Could be some List also
}
细节
@Getter
public class Detail {
// Recommendation, in Java field name should start lower case
@SerializedName("Id")
private UUID id;
}
这也允许以后灵活地从同一个 JSON 中获取您需要的任何其他字段。
像这样序列化你的 JSON:
Data data = gson.fromJson(YOUR_JSON, Data.class);
检查 id - 例如 - 如:
data.getDetails().forEach(d -> log.info("{}", d.getId()));
TA贡献1757条经验 获得超8个赞
根据 Gson 指南,您需要使用正确的参数化类型而不是泛型类型。然后,您可以轻松地从地图中访问所需的值。
Map<String, Dummy> map = new HashMap<String, Dummy>();
Type t = new TypeToken<Map<String, Dummy>>() {}.getType();
map = new Gson().fromJson(jsonobj.toString(), type);
然后您可以获取地图值 ( map.get("details") 并从中读取 id。
添加回答
举报
