2016-12-15 47 views
1

我想解析一個JSON對象使用改進2.0後this指南,但它不起作用。我認爲這是因爲JSON格式的差異。JSON對象解析使用retrofit2.0

這裏是具有格式嵌套JSON對象:

{ 
    "SearchService": { 
     "list_total_count": 531, 
     "RESULT": { 
      "CODE": "INFO-001", 
      "MESSAGE": "SUCCESS" 
     }, 
     "row": [{ 
      "ID": "1983", 
      "NAME": "SAN", 
      "NUM": "38", 
     }, { 
      "ID": "1984", 
      "NAME": "DU", 
      "NUM": "27", 
     }] 
    } 
} 

這裏使用類代碼SerializedName:

RowList.java

public class RowList { 
    @SerializedName("row") 
    @Expose 
    private ArrayList<Row> rows= new ArrayList<>(); 

    public ArrayList<Row> getRows() { 
     return rows; 
    } 

    public void setRows(ArrayList<Row> rows) { 
     this.rows= rows; 
    } 
} 

Row.java

public class Row{ 

    @SerializedName("ID") 
    @Expose 
    private String id; 

    @SerializedName("NAME") 
    @Expose 
    private String name; 

    @SerializedName("NUM") 
    @Expose 
    private String num; 

    /*getter setter*/ 

} 
+0

改造不分析JSON。 Gson的確如此。你可以使用這個網站來獲得一個好的開始。 http://www.jsonschema2pojo.org/ –

+1

注意:'「NUM」:「38」,'< - 這個逗號使得這個無效JSON –

+0

我使用com.squareup.retrofit2:converter-gson:2.0.2庫 –

回答

1

閱讀該指南。

有兩種創建Model類的方法。第一種方法是手動方法,它要求您學習如何使用Gson庫。第二種方法是通過捕獲JSON輸出,並使用jsonschema2pojo

看起來你已經嘗試的辦法一個還可以自動生成所需的Java類,但沒有(沒有?)試圖閱讀過Gson文檔。


好的,你有一個。覆蓋對象中"row": [...],所以你也需要對象爲以下幾點:

  • "SearchService": {}
  • "RESULT": {}

我不認爲RowList類是必要的。 List<Row>很好。

例如,

class Result { 
    @SerializedName("CODE") 
    String code; 
    @SerializedName("MESSAGE") 
    String message; 
} 

class SearchService { 
    @SerializedName("list_total_count") 
    long count; 
    @SerializedName("RESULT") 
    Result result; 
    @SerializedName("row") 
    private ArrayList<Row> rows= new ArrayList<>(); 
} 

(除去@Expose爲了簡明)

然後,改造將使用Call<SearchService>

+0

非常感謝您的幫助! –