Android json error com.google.gson.JsonSyntaxException: java.lang.IllegalStateException

Я столкнулся с этой ошибкой при анализе данных json

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 

Я не мог найти решение. Мои данные json:

 { "user": [ { "email": "wijden@jerseyrest.com", "firstName": "Wijden", "id": "1", "lastName": "User" }, { "email": "user@jerseyrest.com", "firstName": "Sample", "id": "2", "lastName": "User" }, { "email": "ingenieur@jerseyrest.com", "firstName": "Ingenieur", "id": "3", "lastName": "User" } ] } 

И вот как я это сделал:

 Type type = new TypeToken<List<WorkItem>>() { }.getType(); List<WorkItem> workitems = (List<WorkItem>) new Gson().fromJson(resultat, type); 

Я был бы очень признателен, если вы поможете мне решить эту проблему. заранее спасибо

Чтобы разобрать ваш JSON, я бы создал классы для переноса ответа, а именно:

 public class Response { @SerializedName("user") private List<User> userList; //getters and setters } 

а также,

 public class User{ @SerializedName("id") private int id; @SerializedName("email") private String email; @SerializedName("firstName") private String firstName; @SerializedName("lastName") private String lastName; //getters and setters } 

Затем, чтобы разобрать ваш ответ JSON, вам просто нужно сделать:

 Gson gson = new Gson(); Response data = gson.fromJson(yourJsonString, Response.class); 

Тогда вы можете легко получить доступ к своим данным, например:

 User user = data.getUserList.get(i); 

Примечание . Использование аннотации @SerializedName интересно отделить имя поля в ответе JSON и в вашем приложении, чтобы следовать соглашениям об именах Java …

Когда вы пытаетесь разобрать такую ​​коллекцию, Gson ожидает, что у вас будет JSON ARRAY (как указано в сообщении об ошибке), а не в Object. Ваш JSON – это ОБЪЕКТ, содержащий ARRAY (массив объектов).

Чтобы проанализировать, что вам понадобится Java-объект, у которого есть коллекция как ваш тип. Или вам нужно будет изменить json как массив, или вы можете создать собственный сериализатор / десериализатор (или придумать какой-нибудь другой трюк, но в итоге ваша JSON не будет массивом, настоящее время).

Попробуйте изменить свой Java-объект, в котором вы его разбираете, для быстрого исправления:

 public class WorkItemsContainer { private List<WorkItem> workItems; //getters/setters/ctor/etc } и public class WorkItemsContainer { private List<WorkItem> workItems; //getters/setters/ctor/etc } 

Смотрите раздел Gons docs «с объектами» здесь: https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples .