2017-07-17 160 views
1

我已經開始使用Moshi以及Retrofit 2,並遇到了解析服務調用返回的父對象內的對象數組的問題。返回的JSON看起來是這樣的:無法使用Moshi解析返回的JSON數組

{ 
    "acf": { 
     "email": "[email protected]", 
     "address": "24 Cortland Avenue", 
     "country": "US", 
     "description": "Oh my goodness", 
     "created_at": "1416672067", 
     "updated_at": "1416672067", 
     "facebook": "", 
     "contact": "Dirk Gently",  
     "photos": [ 
      { 
       "file": 3525 
      }, 
      { 
       "file": 3526 
      }, 
      { 
       "file": 6110 
      }, 
      { 
       "file": 3527 
      }, 
      { 
       "file": 3528 
      }, 
      { 
       "file": 6700 
      }, 
      { 
       "file": 7404 
      }, 
      { 
       "file": 7419 
      } 
     ], 

     "latitude": "40.801249", 
     "longitude": "-99.746280" 
    } 
} 

我得到的 '照片' 字段以下異常:

com.squareup.moshi.JsonDataException:預期BEGIN_ARRAY但在路徑 STRING $ [0] .acf.photos

我定義的車型,像這樣:

public class Acf { 

private String email; 
private String address; 
List<Photo>photos; 

} 

public class Photo { 
    public int file; 
} 

我試過以各種其他方式在模型中聲明屬性,並通過文檔讀取,試圖找出我做錯了什麼。我被困在這一點上,真的可以用第二套眼睛指向正確的方向。我有一種感覺,我錯過了一些痛苦簡單明顯的事情。在此先感謝任何可以提供幫助的人。如果我遺漏了任何相關信息,請通知我,我會更新信息。

更新:我發現這個異常只發生在我獲取多個ACF時。如果我爲單個對象發出請求,則所有內容都可以正確解析。

+0

你可以發佈所有你的模型類是Acf,照片和MainRespose – Ashwani

+0

是否曾經有一個JSON響應的字符串值爲''照片''? –

+0

@EricCochran是的。如果我通過id獲取單個記錄,它會解析得很好,但當我獲取多個(分頁)時,它不適用於該字段。我將深入研究文檔,看看是否有更好的方法來記錄它。 – ninehundredt

回答

1

基於錯誤,它聽起來像您要調用的端點可能會返回該參數的不同類型(例如,當您期待數組時)。嘗試將它從列表<>更改爲對象,並查看該調用是否成功。你應該能夠對對象進行類型檢查,並從它中輸出你需要的東西。另一種方法是使用自定義類型的適配器,但我不確定如何使用Moshi來完成該功能。祝你好運。

+0

我很確定我嘗試用一​​個通用對象替換數組,但過去兩天有點模糊。我會給它一個鏡頭。謝謝! – ninehundredt

+0

非常感謝您的建議。這並不理想,但考慮到我無法更改端點,它效果很好。 – ninehundredt