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;
}
}
이 POJO의 배열을 얻기 위해 이와 같은 GSON을 사용하려고합니다. 여기에서 응답은 내 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 개체에서 하나의 속성 만 가져오고 싶기 때문에 JSON 개체와 정확히 동일한 구조를 가진 POJO를 만들고 싶지 않습니다. 실제로 JSON 응답과 동일한 구조로 POJO를 만들지 않아도 되었으면합니다. 실제로는 엄청난 응답이고 제어 할 수 없기 때문에 내일도 바뀔 수 있기 때문입니다.
그래서 나는 이것을 할 수 있었다. 누군가가 내일 혜택을받을 수 있도록 이에 대한 답변 게시 :)
먼저 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 배열의 형태로 속성 이름에 대한 모든 값 목록을 얻습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다