我是JSON解析的新手,我使用Square的Retrofit库并遇到了这个问题。
我正在尝试解析此JSON响应:
[ { "id": 3, "username": "jezer", "regid": "oiqwueoiwqueoiwqueoiwq", "url": "http:\/\/192.168.63.175:3000\/users\/3.json" }, { "id": 4, "username": "emulator", "regid": "qwoiuewqoiueoiwqueoq", "url": "http:\/\/192.168.63.175:3000\/users\/4.json" }, { "id": 7, "username": "test", "regid": "ksadqowueqiaksj", "url": "http:\/\/192.168.63.175:3000\/users\/7.json" } ]
这是我的模型:
public class Contacts { public List<User> contacts; } ... public class User { String username; String regid; @Override public String toString(){ return(username); } }
我的界面:
public interface ContactsInterface { @GET("/users.json") void contacts(Callback<Contacts> cb); }
我的成功方法:
@Override public void success(Contacts c, Response r) { List<String> names = new ArrayList<String>(); for (int i = 0; i < c.contacts.size(); i++) { String name = c.contacts.get(i).toString(); Log.d("Names", "" + name); names.add(name); } ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, names); mSentTo.setAdapter(spinnerAdapter); }
当我将其用于成功方法时,会引发错误
预期为BEGIN_OBJECT,但在第1行column2处为BEGIN_ARRAY
怎么了
现在,你正在解析响应,就好像它是这样格式化的:
{ "contacts": [ { .. } ] }
异常告诉你,你期望在根目录有一个对象,但实际数据实际上是一个数组。这意味着你需要将类型更改为数组。
最简单的方法是仅将列表用作回调中的直接类型:
@GET("/users.json") void contacts(Callback<List<User>> cb);