我想解析在Android中使用GSON的爛番茄API的JSON數據。我可以得到它的一些解析,但我似乎有困難與我的基本結果對象內的數組。使用GSON與爛番茄API(Android)的問題
這裏是我的「影片對象」類:
package ---;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class MovieObject {
public List<Rating> ratings; //You are a problem
@SerializedName("id")
public String id;
@SerializedName("title")
public String title;
@SerializedName("year")
public int year;
@SerializedName("mpaa_rating")
public String mpaaRating;
@SerializedName("runtime")
public int runtime;
@SerializedName("critics_consensus")
public String criticsConsensu;
@SerializedName("synopsis")
public String synopsis;
@SerializedName("studio")
public String studio;
}
我可以成功地拉動領域,如title
,id
和year
但在我的評級類不能訪問的字段(public List<Rating> ratings
)
這裏是評分等級:
package ---
import com.google.gson.annotations.SerializedName;
public class Rating {
@SerializedName("critics_rating")
public String criticsRating;
@SerializedName("critics_score")
public int criticsScore;
@SerializedName("audience_rating")
public String audienceRating;
@SerializedName("audience_score")
public int audienceScore;
}
這是我的活動相關的一些摘錄如何我試試以獲取數據。其中大部分工作。
InputStream source = retrieveStream(url);
Gson gson = new Gson();
Reader reader = new InputStreamReader(source);
MovieObject mObject = gson.fromJson(reader, MovieObject.class); //Expected BEGIN_ARRAY but was BEGIN_OBJECT instead. Something to do with the Rating object I believe.
Toast.makeText(this, mObject.title, Toast.LENGTH_SHORT).show();
Toast.makeText(this, mObject.synopsis,Toast.LENGTH_SHORT).show();
的問題出現了,當我嘗試做這樣的事情:
List<Rating> ratings = mObject.ratings;
for (Rating rating : ratings) {
Toast.makeText(this, rating.criticsScore,Toast.LENGTH_SHORT).show();
}
顯示的錯誤是:
預計BEGIN_ARRAY但BEGIN_OBJECT在行28列362
如果我註釋掉MovieObject
中聲明的部分評級變量...事情工作。所以這似乎是問題。但我不知道如何解決這個問題。僅使用原生Android JSON解析而不是嘗試使用GSON會更容易些嗎?或與傑克遜混亂?
僅供參考,這裏是爛番茄響應的API瀏覽器:http://jsonviewer.stack.hu/#http://api.rottentomatoes.com/api/public/v1.0/movies/770672122.json?apikey=vg2cj5tgqmbkkxz2vgyxqyh9
我建議你不要污染你噸'@ SerializedName'類。你可以使用FieldNamingStrategy來代替FieldNamingPolicy.LOWER_CASE_WITH_DASHES。 – maaartinus
好的,謝謝你的建議。我只是從示例中複製了該代碼。 – Xero