我正在尝试以以下形式解析 gson 响应:
{"movie_list":[
{"movie_id":"1","movie_name":"Avatar 2009"},
{"movie_id":"2","movie_name":"Titanic"}
]}
使用GSON库,像这样:
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
movieList = new ArrayList<MovieList>();
movieList = Arrays.asList(gson.fromJson(reader, MovieList[].class));
我做了一个MovieList类:
公共类电影列表{
@SerializedName("movie_id")
public String movieId;
@SerializedName("movie_name")
public String movieName;
public String getMovieId() {
return movieId;
}
public void setMovieId(String movieId) {
this.movieId = movieId;
}
public String getMovieName() {
return movieName;
}
public void setMovieName(String movieName) {
this.movieName = movieName;
}
}
但是得到这个例外:
01-19 15:48:09.425: E/AndroidRuntime(4868): FATAL EXCEPTION: AsyncTask #1
01-19 15:48:09.425: E/AndroidRuntime(4868): Process: com.example.autocompletetextviewdemo, PID: 4868
01-19 15:48:09.425: E/AndroidRuntime(4868): java.lang.RuntimeException: An error occured while executing doInBackground()
01-19 15:48:09.425: E/AndroidRuntime(4868): at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-19 15:48:09.425: E/AndroidRuntime(4868): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
01-19 15:48:09.425: E/AndroidRuntime(4868): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
01-19 15:48:09.425: E/AndroidRuntime(4868): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-19 15:48:09.425: E/AndroidRuntime(4868): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-19 15:48:09.425: E/AndroidRuntime(4868): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-19 15:48:09.425: E/AndroidRuntime(4868): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-19 15:48:09.425: E/AndroidRuntime(4868): at java.lang.Thread.run(Thread.java:841)
01-19 15:48:09.425: E/AndroidRuntime(4868): Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
01-19 15:48:09.425: E/AndroidRuntime(4868): at com.google.gson.Gson.fromJson(Gson.java:815)
01-19 15:48:09.425: E/AndroidRuntime(4868): at com.google.gson.Gson.fromJson(Gson.java:741)
01-19 15:48:09.425: E/AndroidRuntime(4868): at com.example.autocompletetextviewdemo.MainActivity$AutoCompleteText.doInBackground(MainActivity.java:152)
01-19 15:48:09.425: E/AndroidRuntime(4868): at com.example.autocompletetextviewdemo.MainActivity$AutoCompleteText.doInBackground(MainActivity.java:1)
01-19 15:48:09.425: E/AndroidRuntime(4868): at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-19 15:48:09.425: E/AndroidRuntime(4868): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-19 15:48:09.425: E/AndroidRuntime(4868): ... 4 more
01-19 15:48:09.425: E/AndroidRuntime(4868): Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
01-19 15:48:09.425: E/AndroidRuntime(4868): at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338)
01-19 15:48:09.425: E/AndroidRuntime(4868): at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70)
01-19 15:48:09.425: E/AndroidRuntime(4868): at com.google.gson.Gson.fromJson(Gson.java:803)
JSON 的根对象是一个对象,而不是一个数组。
这里需要两个类,一个表示外部对象,另一个表示电影本身:
MoviList
类重命名为Movie
Movie
类,如下所示:电影列表:
public class MovieList {
@SerializedName("movie_list")
public List<Movie> Movies;
}
目前,我正在得到 com.google.gson.jsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_OBJECT,但在第1行第2列路径$处为BEGIN_ARRAY 请帮帮我.
我有以下JSON结构: 以下是我的: 下面是我的POJO类: 最后,这里是我正在进行网络调用的代码:
我知道这已经不是第一次有人问这个问题了,但是在Treverfit2中,我找不到解决我问题的正确方法。我看了一个在线教程,效果很好。当我将相同的代码应用到我自己的endpoint时,我得到了这个异常:我不知道如何解决这个问题。 接口: 但这个不是: 我的音乐课:
我怎么解决这个?
问题内容: 我遇到错误了。 由于以下原因,无法解析JSON:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第2列为BEGIN_OBJECT 服务器网址 执行请求 上课后 我该如何解决? 问题答案: 您在注释中声明返回的JSON是这样的: 您告诉Gson您有一个对象数组:
我有一个Json和搜索特性,我的问题是: 我得到了3个项目: 1。测试1 2。测试2 3。测试3 错误: 要提一下,搜索“2”时会显示“测试2”,但搜索“测试2”会抛出错误。 它在工作于基本的Json,在切换到新的库之后,它停止了工作。 型号: 使连接方法(库方法):
我使用的是MVVMAndroid架构组件+改型结构。 答复: 现在这些是我的课。 虽然每次我都失败了。处为BEGIN_ARRAY 高级帮助将非常感谢!
在阅读@Ridcully的响应之后,我想问一下是否有一种方法可以更新,以便它知道JSON是一个数组。比如?