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

下面是我的Json。我想使用 Gson 在“详细信息”中获取“Id”的值


{

    "name": "testAutomation-1",

    "owner": "TestUSer",

    "description": "testAutomation-1",

    "subSet": [

        "test-audit"

    ],

    "labels": "{\"engagementType\":\"Sx\",\"type\":\"collect\"}",

    "createdTime": 1548508294790,

    "updatedTime": 1548654725381,

    "scheduleDateTime": null,

    "timeZone": null,

    "jobStatus": "Report-Requested",

    "loggedInUser": null,

    "Details": [

        {

            "Status": "Completed",

            "Id": "fe1f6b40-216b-11e9-a769-25be4c5889e7"

        }

    ]

}

我使用下面的代码创建了一个地图。但不确定如何获得价值


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


神不在的星期二
浏览 285回答 3
3回答

HUH函数

假设您需要数组的第一个元素,您可以执行以下操作(知道这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());

LEATH

在您的 JSONDetails中是一个列表或一个数组。所以在某些情况下不只有一个 id,你也应该为此做好准备。创建DTO来描述数据通常也是一个好习惯,比如下面两个类:数据@Getterpublic class Data {&nbsp; &nbsp; // Recommendation, in Java field name should start lower case&nbsp; &nbsp; @SerializedName("Details")&nbsp; &nbsp; List<Detail> details; // Could be some List also}细节@Getterpublic class Detail {&nbsp; &nbsp; // Recommendation, in Java field name should start lower case&nbsp; &nbsp; @SerializedName("Id")&nbsp; &nbsp; private UUID id;}这也允许以后灵活地从同一个 JSON 中获取您需要的任何其他字段。像这样序列化你的 JSON:Data data = gson.fromJson(YOUR_JSON, Data.class);检查 id - 例如 - 如:data.getDetails().forEach(d -> log.info("{}", d.getId()));

陪伴而非守候

根据 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java