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。
添加回答
舉報