[英]How to get array of objects from JSON response using GSON
我正在使用RestTemplate和GSON編寫REST客戶端。 以下是我的JSON響應示例
{
"value": [
{
"properties": {
"vmId": "f7f953fb-d853-4373-b564-",
"hardwareProfile": {
"vmSize": "Standard_D2"
},
},
"name": "A",
"Id": ""
},
{
"properties": {
"vmId": "f7f953fb-d853-4373-b564-",
"hardwareProfile": {
"vmSize": "Standard_D2"
},
},
"name": "B",
"Id": ""
},
{
"properties": {
"vmId": "f7f953fb-d853-4373-b564-",
"hardwareProfile": {
"vmSize": "Standard_D2"
},
},
"name": "C",
"Id": ""
}
]
}
我想要的是僅獲取屬性的值->“ name
”
因此,我創建了一個僅具有name
作為成員字段的簡單POJO。
public class VMNames {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我正在嘗試像這樣使用GSON來獲取此POJO的數組。 在這里,響應是我的JSON響應對象。
Gson gson = new Gson();
VMNames[] vmNamesArray = gson.fromJson(response.getBody(), VMNames[].class);
System.out.println(vmNamesArray.length);
但是當我這樣做時,我得到一個錯誤,即如下所示:
java.lang.IllegalStateException:應為BEGIN_ARRAY,但在第1行第2列路徑$ BEGIN_OBJECT
請注意,我不想創建一個結構與我的JSON對象完全相同的POJO,因為我只想從JSON對象中獲取一個屬性。 我希望我不必真正創建與JSON響應具有相同結構的POJO,因為實際上,這是一個巨大的響應,並且我無法控制它,因此它明天也可以更改。
你可以嘗試一下:
public class VMNames {
@SerializedName("name")
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Type collectionType = new TypeToken<Collection<VMNames>>(){}.getType();
Collection<VMNames> vmNamesArray = gson.fromJson(response.getBody(), collectionType);
System.out.println(vmNamesArray.length);
或嘗試:
VMNames[] vmNamesArray = gson.fromJson(response.getBody(), VMNames[].class);
這樣我就可以完成。 發布答案,以便明天有人可以受益:)
首先,我停止使用GSON並開始使用JSON。 下面是幫助的代碼。
RestTemplate restTemplate = new RestTemplate();
response = (ResponseEntity<String>) restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
JSONObject jsonObj = new JSONObject(response.getBody().toString());
JSONArray c = jsonObj.getJSONArray("value");
for (int i = 0; i < c.length(); i++) {
JSONObject obj = c.getJSONObject(i);
String VMName = obj.getString("name");
VMNames vmnames = new VMNames();
vmnames.setName(VMName);
vmNames.add(vmnames);
}
return vmNames;
我以json數組的形式獲取了針對屬性名稱的所有值的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.