亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 中使用 Gson 從嵌套對象中讀取單個值

在 Java 中使用 Gson 從嵌套對象中讀取單個值

神不在的星期二 2022-05-25 16:12:47
下面是我的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);
查看完整描述

3 回答

?
HUH函數

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


查看完整回答
反對 回復 2022-05-25
?
LEATH

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


查看完整回答
反對 回復 2022-05-25
?
陪伴而非守候

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。


查看完整回答
反對 回復 2022-05-25
  • 3 回答
  • 0 關注
  • 260 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號