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 并在此处找到类似标签的街道。