java.lang.Byte 类型 0 处的值 91 无法转换为 JSONObject
Value 91 at 0 of type java.lang.Byte cannot be converted to JSONObject
我收到以下错误:
org.json.JSONException: Value 91 at 0 of type java.lang.Byte cannot be converted to JSONObject
也是因为这行代码:
JSONObject jObj = j.getJSONObject(i);
我正在做一个 GET
请求,我在 Android Studio 中记录了它,它看起来像这样:
jsonarray [91,109,111,100,101,108,46,83,116,111,114,101,64,52,57,57,54,102,97,56,44,32,109,111,100,101,108
在浏览器中看起来像这样:
Link来个截图:http://i.imgur.com/NTpwbuB.png
我用了一个JSONObject
,因为我想以后做这样的事情:
String storeName = jObj.getString("STORE NAME");
String street = jObj.getString("STREET");
String city = jObj.getString("CITY");
代码如下:
public void getSubprises() {
Call<List<Store>> call = subpriseAPI.listStores();
call.enqueue(new Callback<List<Store>>() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onResponse(Response<List<Store>> response, Retrofit retrofit) {
try {
JSONArray j = new JSONArray(response.body().toString().getBytes());
System.out.println("jsonarray "+ j);
for (int i = 0; i < j.length(); i++) {
JSONObject jObj = j.getJSONObject(i);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
}
});
}
只是改变
JSONArray j = new JSONArray(response.body().toString().getBytes());
至
JSONArray j = new JSONArray(response.body().toString());
我想这就是你想要做的。
如果这不起作用,那么你真的不知道响应主体里面有什么,学习使用 System.out.print 函数看看 response.body().toString() 打印什么。
如果它像
[
{"STORE_NAME":"abc","STREET":"def"},{"STORE_NAME":"asw","STREET":"rew" }
]
一切都很好。否则您需要更改获取 jsonobject 的方式。
编辑:
["model.Store@4996fa8","model.Store@949eac1","model.Store@c45f266", ...
你在评论中写的这个输出让我意识到你不需要 JSONArray 或任何东西,Response> response 已经有 Store 对象。
然后查看输出,response.body() returns 列表,
然后你可以这样做以获得输出
编辑 2:
java.util.Iterator it=response.body().iterator();
while(it.hasNext())
System.out.println(((Store)it.next()).getStreet());
以上代码仅在 Store 对象具有 getStreet 方法时才有效,当然如果没有,您可以使用 st.street 或 st.然后按 ctrl+space 并在此处找到类似标签的街道。
我收到以下错误:
org.json.JSONException: Value 91 at 0 of type java.lang.Byte cannot be converted to JSONObject
也是因为这行代码:
JSONObject jObj = j.getJSONObject(i);
我正在做一个 GET
请求,我在 Android Studio 中记录了它,它看起来像这样:
jsonarray [91,109,111,100,101,108,46,83,116,111,114,101,64,52,57,57,54,102,97,56,44,32,109,111,100,101,108
在浏览器中看起来像这样:
Link来个截图:http://i.imgur.com/NTpwbuB.png
我用了一个JSONObject
,因为我想以后做这样的事情:
String storeName = jObj.getString("STORE NAME");
String street = jObj.getString("STREET");
String city = jObj.getString("CITY");
代码如下:
public void getSubprises() {
Call<List<Store>> call = subpriseAPI.listStores();
call.enqueue(new Callback<List<Store>>() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onResponse(Response<List<Store>> response, Retrofit retrofit) {
try {
JSONArray j = new JSONArray(response.body().toString().getBytes());
System.out.println("jsonarray "+ j);
for (int i = 0; i < j.length(); i++) {
JSONObject jObj = j.getJSONObject(i);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
}
});
}
只是改变
JSONArray j = new JSONArray(response.body().toString().getBytes());
至
JSONArray j = new JSONArray(response.body().toString());
我想这就是你想要做的。 如果这不起作用,那么你真的不知道响应主体里面有什么,学习使用 System.out.print 函数看看 response.body().toString() 打印什么。
如果它像
[ {"STORE_NAME":"abc","STREET":"def"},{"STORE_NAME":"asw","STREET":"rew" } ]
一切都很好。否则您需要更改获取 jsonobject 的方式。
编辑:
["model.Store@4996fa8","model.Store@949eac1","model.Store@c45f266", ...
你在评论中写的这个输出让我意识到你不需要 JSONArray 或任何东西,Response> response 已经有 Store 对象。
然后查看输出,response.body() returns 列表,
然后你可以这样做以获得输出
编辑 2:
java.util.Iterator it=response.body().iterator();
while(it.hasNext())
System.out.println(((Store)it.next()).getStreet());
以上代码仅在 Store 对象具有 getStreet 方法时才有效,当然如果没有,您可以使用 st.street 或 st.然后按 ctrl+space 并在此处找到类似标签的街道。