2016-08-26 8 views
2

私のアレイにGSONを使用します。GSONアレイ、エラーメッセージ:文字列が必要ですが、BEGIN_ARRAYでした

私はいくつかの例を見ましたが、私のコードで動作させることができませんでした。
Using GSON to parse a JSON array

は、私は、このエラーメッセージが表示されます。このプロジェクトは、JSONオブジェクトを解析対象とするためには、文字列を期待したが行1列

orginalチュートリアルでBEGIN_ARRAYだった、私が続きます。

マイ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

問題は何であるExerciseModelクラスのタイプStringでなければなりませんか?どうしてあなたはそれを働かせなかったのですか?何が間違っていますか? –

答えて

1

あなたのクラスがあるべきGSONコードの

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; } 

} 

とコードのようになります。

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コードはどこに配置しましたか?これをループの中に入れましたか?Gson gson = new Gson(); for(int i = 0; i

+0

こんにちは、このコードはJSONのオブジェクトの全リストを取得しません。このコードからオブジェクトのArrayListを取得しているので、ループを使用する必要はありません。私の場合、finalJson変数でjson変数を変更するだけです。 –

+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は、json配列を含むStringです。 nidあなたのJSONのStringであるため、また、user guide

で与えられた例をチェックアウト 、それは同様に

関連する問題