在Java中使用Gson从嵌套对象读取单个值

时间:2019-01-28 12:06:30

标签: java json gson

下面是我的杰森。我想使用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}}

3 个答案:

答案 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()));