2016-08-26 2 views
2

Я хочу использовать GSON для моего массива.GSON Array, сообщение об ошибке: ожидается строка, но BEGIN_ARRAY

Я просмотрел несколько примеров, но не смог заставить его работать с моим кодом.
Using GSON to parse a JSON array.

Я получаю сообщение об ошибке: Ожидаемое строку но BEGIN_ARRAY в строке 1 колонки

учебник оригинал, я последовал за этот проект охватывал разбора JSON объектов.

Мои Json:

[{ 
    "nid": "25", 
    "title": "angry guy", 
    "body": "fhjk gjj" 
}, { 
    "nid": "24", 
    "title": "25 mobile", 
    "body": "25 test tes" 
}, { 
    "nid": "8", 
    "title": "new post 4", 
    "body": "sdfsdf sdfsdf" 
}, { 
    "nid": "7", 
    "title": "new post", 
    "body": "sdf sdf sdfsdf" 
}] 

Мой код:

String finalJson = buffer.toString(); 
      JSONArray parentArray = new JSONArray(finalJson); 
      List<ExerciseModel> exerciseModelList = new ArrayList<>(); 

      Gson gson = new Gson(); 
      for(int i=0; i<parentArray.length(); i++){ 
       JSONObject finalObject = parentArray.getJSONObject(i); 
       ExerciseModel exerciseModel = gson.fromJson(finalObject.toString(), ExerciseModel.class); 
       exerciseModelList.add(exerciseModel); 
      } 

      return exerciseModelList; 

Моя модель:

public class ExerciseModel { 

    private int nid; 
    private String title; 
    private String body; 

    public int getNid() { 
     return nid; 
    } 
    public void setNid(int nid) { 
     this.nid = nid; 
    } 
    public String getTitle() { 
     return title; 
    } 
    public String toString() { 
     return this.title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public String getBody() { 
     return body; 
    } 
    public void setBody(String body) { 
     this.body = body; 
    } 
} 

Спасибо заранее

+0

В чем проблема? Как вам это не удалось? Что он делает неправильно? –

ответ

1

Ваш класс должен быть

public class ExerciseModel 
{ 
    private String nid; 

    public String getNid() { return this.nid; } 

    public void setNid(String nid) { this.nid = nid; } 

    private String title; 

    public String getTitle() { return this.title; } 

    public void setTitle(String title) { this.title = title; } 

    private String body; 

    public String getBody() { return this.body; } 

    public void setBody(String body) { this.body = body; } 

} 

И код GSON код должен быть:

String json = "[{ \"nid\": \"25\", \"title\": \"angry guy\", \"body\": \"fhjk gjj\" }, { \"nid\": \"24\", \"title\": \"25 mobile\", \"body\": \"25 test tes\" }, { \"nid\": \"8\", \"title\": \"new post 4\", \"body\": \"sdfsdf sdfsdf\" }, { \"nid\": \"7\", \"title\": \"new post\", \"body\": \"sdf sdf sdfsdf\" }]"; 
Type listOfTestObject = new TypeToken<List<ExerciseModel>>() {}.getType(); 
ArrayList<ExerciseModel> models = new Gson().fromJson(json, listOfTestObject); 
System.out.println(models.get(0).getTitle()); 
+0

Hallo Vuk, где вы разместили код GSON? Вы положили его внутри цикла for: Gson gson = new Gson(); for (int i = 0; i

+0

Привет, Этот код не содержит весь список объектов для JSON. Вы получаете ArrayList объекта из этого кода, поэтому нет необходимости использовать цикл. Вы просто меняете переменную json в моем случае с вашей переменной finalJson. –

+0

Что именно здесь происходит? – fobbymaster

0

Чтобы получить массив вашей модели, просто сделать это

ExerciseModel[] models=gson.toJson(stringToBeParsed, ExerciseModel[].class); 

Для преобразования до java.util.List:

Type modelListType = new TypeToken<List<ExerciseModel>>(){}.getType(); 
List<ExerciseModel> modelList = gson.fromJson(stringToBeParsed, modelListType); 

где, как следует из названия, stringToBeParsed является String, содержащим массив json. Проверьте примеры, приведенные в user guide

Кроме того, поскольку nid является строка в вашем JSON, он должен быть типа String в ExerciseModel классе, а