下面是我的杰森。我想使用Gson
获取“详细信息”中“ Id”的值Map<String, Object> createmap = new HashMap<String, Object>();
Gson gson = new Gson();
Type type = new TypeToken<Map<String, Object>>(){}.getType();
createmap = gson.fromJson(jsonobj.toString(), type);
我使用以下代码创建了地图。但不确定如何获得价值
{{1}}
答案 0 :(得分:1)
假设您需要数组的第一个元素,则可以执行以下操作(知道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
数组作为JsonArray
获取,然后再获取Id
元素的值。
由于您似乎正在处理UUID,因此您可能会受益于:
UUID uuid = UUID.fromString(recordElement.get("Id").getAsString());
答案 1 :(得分:0)
根据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。
答案 2 :(得分:0)
在您的JSON Details
中,是一个列表或一个数组。因此,在某些情况下,不仅只有一个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()));