Java can';t获取格式正确的json对象
假设我从一个api中获取一些Java can';t获取格式正确的json对象,java,android,json,Java,Android,Json,假设我从一个api中获取一些json数组 [{"id":1,"title":"title","description":"description","vote":null,"created_at":"2013-11-12T21:08:10.922Z","updated_at":"2013-11-12T21:08:10.922Z"}] 我想从URL\u SomeURL中以Some对象的形式检索这个json public class Some implements Serializable {
json
数组
[{"id":1,"title":"title","description":"description","vote":null,"created_at":"2013-11-12T21:08:10.922Z","updated_at":"2013-11-12T21:08:10.922Z"}]
我想从URL\u Some
URL中以Some
对象的形式检索这个json
public class Some implements Serializable {
private String id;
private String title;
private String description;
private String vote;
private String created_at;
private String updated_at;
}//with all getters and setters
问题是我一直在收到这个信息
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
PS:我使用
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParseException;
您发布的JSON是一个JSON数组,由它周围的方括号表示:[] 您必须从JSON数组中读取第一个对象 我个人使用Android JSON的软件包,并以如下方式解析我的JSON:
private void parseJSON(String jsonString) {
JSONArray json;
try {
json = new JSONArray(jsonString);
JSONObject jsonObject = jsonArray.getJSONObject(0);
String id = jsonObject.getString("id");
} catch (JSONException jsonex) {
jsonex.printStackTrace();
}
}
如果数组中有多个JSON对象,可以使用简单的for循环(不是针对每个对象!)对它们进行迭代。您的JSON实际上应该是这样的:
private void parseJSON(String jsonString) {
JSONArray json;
try {
json = new JSONArray(jsonString);
JSONObject jsonObject = jsonArray.getJSONObject(0);
String id = jsonObject.getString("id");
} catch (JSONException jsonex) {
jsonex.printStackTrace();
}
}
{“结果”:[{“id”:1,“title”:“title”,“description”:“description”,“vote”:null,“created_at”:“2013-11-12T21:08:10.922Z”,“updated_at”:“2013-11-12T21:08:10.922Z”}
Gson将尝试解析json并创建一个SomeWrapper对象。这就告诉Gson他将等待一个格式为{…}
的json,因为他需要一个对象。然而,您传递了一个数组,这就是为什么它抱怨需要BEGIN_对象({
),但是需要BEGIN_数组([
)。之后,它会希望这个json对象有一个结果
字段,该字段将保存一个对象数组
但是,您可以直接创建列表
,而无需包装类。要执行此操作,请执行以下操作:
Type type= new TypeToken<List<Some>>() {}.getType();
List<Some> someList = new GsonBuilder().create().fromJson(jsonArray, type);
Type Type=new-TypeToken(){}.getType();
List someList=new GsonBuilder().create().fromJson(jsonArray,type);
在这种情况下,您可以使用您发布的原始json数组。谢谢您,但是使用
Gson
更简单,因为它考虑了类来包装json
。顺便说一句,我对android
:我尝试将请求变量记录为:log.d(“TAG”,String.valueOf(request))
但我的控制台中没有输入。你能解释一下吗?谢谢你,它起作用了,我只需要输入你的fromJson
方法Reader=request.bufferedReader();
,因为我的请求
只是一个接口
Type type= new TypeToken<List<Some>>() {}.getType();
List<Some> someList = new GsonBuilder().create().fromJson(jsonArray, type);