2016-09-20 8 views
0

target_idのfield_exercis_arc)を除いて、必要なものすべてを解析できます。
私はnid、タイトルとボディを取得します。 field_exercis_arcにIDを取得する方法がわかりません。AndroidでJSONを解析して値を取得しない


JSON

[{ 
"nid": "26", 
"title": "Question test", 
"body": "xcvxcv", 
"field_exercis_arc": ["25","27"] 
}] 

コード

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

      for(int i=0; i<parentArray.length(); i++){ 
       JSONObject finalObject = parentArray.getJSONObject(i); 

       title_exi = finalObject.getString("title"); 
       text_exi = finalObject.getString("body"); 
       //This part is working. 
       ExerciseModel exerciseModel = new ExerciseModel(); 
       exerciseModel.setTitle(finalObject.getString("title")); 
       exerciseModel.setNid(finalObject.getInt("nid")); 
       exerciseModel.setBody(finalObject.getString("body")); 

       //Problem with this part, not getting the target_id's. 
       List<ExerciseModel.Exer> exerList = new ArrayList<>(); 
       for(int j=0; j<finalObject.getJSONArray("field_exercis_arc").length(); j++){ 
        ExerciseModel.Exer exercis = new ExerciseModel.Exer(); 
        exercis.setTarget_id(finalObject.getJSONArray("field_exercis_arc").getJSONObject(j).getString("target_id")); 
        exerList.add(exercis); 
       } 
       exerciseModel.setExerList(exerList); 
       exerciseModelList.add(exerciseModel); 

       mDB.saveRecordEX(exerciseModel); 
      } 

field_exercis_arcとTARGET_IDのフィールドのモデル事前に

private List<Exer> exerList; 
public List<Exer> getExerList() { 
    return exerList; 
} 

public void setExerList(List<Exer> exerList) { 
    this.exerList = exerList; 
} 

public static class Exer{ 
    private String target_id; 
    public String getTarget_id() { 
     return target_id; 
    } 
    public void setTarget_id(String target_id) { 
     this.target_id = target_id; 
    } 
} 

おかげ

+0

あなたのJSONはplzは –

答えて

0

コード以下の使用:

exercis.setTarget_id(finalObject.getJSONArray("field_exercis_arc").getString(j)); 
1

JSONの結果を得るには、GSONライブラリを使用することをおすすめします。そのためには、結果をオブジェクトに解析するためにJavaクラスが必要です。このために、JSONからJavaクラスへの変換hereを使用できます。

あなたのためのクラス例は次のようになります。

public class Und 
{ 
    private String value; 

    public String getValue() { return this.value; } 

    public void setValue(String value) { this.value = value; } 
} 

public class Body 
{ 
    private ArrayList<Und> und; 

    public ArrayList<Und> getUnd() { return this.und; } 

    public void setUnd(ArrayList<Und> und) { this.und = und; } 
} 

public class Und2 
{ 
    private String target_id; 

    public String getTargetId() { return this.target_id; } 

    public void setTargetId(String target_id) { this.target_id = target_id; } 
} 

public class FieldExercisArc 
{ 
    private ArrayList<Und2> und; 

    public ArrayList<Und2> getUnd() { return this.und; } 

    public void setUnd(ArrayList<Und2> und) { this.und = und; } 
} 

public class RootObject 
{ 
    private String vid; 

    public String getVid() { return this.vid; } 

    public void setVid(String vid) { this.vid = vid; } 

    private String uid; 

    public String getUid() { return this.uid; } 

    public void setUid(String uid) { this.uid = uid; } 

    private String title; 

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

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

    private Body body; 

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

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

    private FieldExercisArc field_exercis_arc; 

    public FieldExercisArc getFieldExercisArc() { return this.field_exercis_arc; } 

    public void setFieldExercisArc(FieldExercisArc field_exercis_arc) { this.field_exercis_arc = field_exercis_arc; } 

    private String cid; 

    public String getCid() { return this.cid; } 

    public void setCid(String cid) { this.cid = cid; } 

    private String last_comment_timestamp; 

    public String getLastCommentTimestamp() { return this.last_comment_timestamp; } 

    public void setLastCommentTimestamp(String last_comment_timestamp) { this.last_comment_timestamp = last_comment_timestamp; } 
} 

あなたはRootObjectに結果を変換することができます。フォックス例:

String json = "{\"vid\": \"26\",\"uid\": \"1\",\"title\": \"Question test\",\"body\": {\"und\": [{\"value\": \"xcvxcv\"}]},\"field_exercis_arc\": {\"und\": [{\"target_id\": \"25\"},{\"target_id\":\"27\"}]},\"cid\": \"0\",\"last_comment_timestamp\": \"1472217577\"}"; 
RootObject object = new Gson().fromJson(json, RootObject.class); 
System.out.println("Title is: "+object.getTitle()); 

結果は次のようになります。この後

Title is: Question test 

あなたはJSONから任意の値を得るためにあなたのオブジェクトを使用することができます。

また、JSONが無効であることを知っておく必要があります。存在しないはずの2つの場所にカンマがあります。文字列で私はあなたがそれらを固定しているあなたを与えた。 JSONを次のようにチェックしてください。JSON Formatter

+0

は私が実際に前にGSONを実装しようとしましたが、私はいくつかのエラーを得たことを確認し、検証されていません。ここにGSONに関する記事があります。 http://stackoverflow.com/questions/39161354/gson-array-error-message-expected-a-string-but-was-begin-array 私はもう一度やり直します。たぶん私は今回はラッキーです –

+0

このリンクでは、JSONArrayも使用していることがわかりました。その後、トラフ配列を繰り返してからGsonを使用しています。これは良くない。私はあなたに前の答えの例を与えるように、すぐにJSONをGsonを使ってオブジェクトに変換する必要があります。また、JSONの形式が正しくないことも知っておく必要があります。 https://jsonformatter.curiousconcept.com/でjsonを確認してください。 –

+0

私は無効なJSONの通知とJSONからタイトルを取得する例で答えを更新しました。 –

-1

JSONを解析するには、このようにする必要があります。

  String finalJson = buffer.toString(); 
      JSONArray parentArray = new JSONArray(finalJson); 

      for(int i=0; i<parentArray.length(); i++){ 
       JSONObject finalObject = parentArray.getJSONObject(i); 

       String title = finalObject.getString("title"); 
       String body = finalObject.getString("body"); 

       JSONArray arr = finalObject.getJSONArray("field_exercis_arc"); 
       for(int x=0; x < arr.length(); x++){ 
        String val = arr.getString(x); 
       } 
      } 
+0

ありがとう、私はJSONを変更しました –

+0

これはコメントだったと思います – Nabin

+0

@NabinKhadka私の返事を更新しました。 – Enzokie

0
JsonArray fieldArray=yourJsonObject.getJsonArray("field_exercis_arc"); 
for(int i=0;i<fieldArray.length;i++){ 
fieldArray.getString(i); 
} 
関連する問題