Я пишу клиента REST с помощью RestTemplate и GSON. Ниже приведен пример моего ответа JSONКак получить массив объектов из ответа JSON с помощью GSON
{
"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
»
Так что я создал простой POJO, который имеет только name
как участник поле.
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: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Пожалуйста, обратите внимание, что я не хочу, чтобы создать POJO, который имеет точно такую же структуру, как мой объект JSON, потому что Я хочу получить только один атрибут из моего объекта JSON. Я надеюсь, что мне не придется создавать POJO с той же структурой, что и мой ответ JSON, потому что на самом деле это огромный ответ, и я не контролирую его, поэтому он также может меняться завтра.
SyntaxError: Неожиданный токен} в JSON в позиции 170 – Sumit
Ваш JSON - это объект и ** не ** массив. Ну есть свойство * value *, которое имеет массив типов, но также содержит объекты. –
Проблема с JSON в скобке перед «именем». – grajsek