无法将0处java.lang.Byte类型的值91转换为JSONObject

无法将0处java.lang.Byte类型的值91转换为JSONObject,java,android,retrofit,Java,Android,Retrofit,我得到以下错误: org.json.JSONException:java.lang.Byte类型的0处的值91无法转换为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

我得到以下错误:

org.json.JSONException:java.lang.Byte类型的0处的值91无法转换为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
在浏览器中,它如下所示:

String storeName = jObj.getString("STORE NAME");
String street = jObj.getString("STREET");
String city = jObj.getString("CITY");
链接到屏幕截图:

我使用了一个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());

我想这就是你想要做的。 如果这不起作用,那么您真的不知道响应主体内部有什么,要了解如何使用System.out.print函数查看response.body.toString打印什么

如果是这样的话

[ {门店名称:abc,街道:def},{门店名称:asw,街道:rew} ]

一切都很好。否则,您需要更改获取jsonobject的方式

编辑:

[模型。Store@4996fa8模型Store@949eac1模型Store@c45f266

您在注释中编写的这个输出使我意识到您不需要JSONArray或任何东西,Response>Response已经有了存储对象

查看该输出,response.body返回列表

然后您可以这样做以获得输出

编辑2:

    java.util.Iterator it=response.body().iterator();
    while(it.hasNext())
         System.out.println(((Store)it.next()).getStreet());

上面的代码只有在Store对象具有getStreet方法时才有效。当然,如果没有,您可以使用st.street或st.then ctrl+space并在那里找到类似street的标签。

为什么您认为JSONArray中的JSON数值91可以转换为JSONObject?您无法获得street of 91。您不需要将JSONObject放在JSON中吗数组?您还在jsonarray构造函数中放入字节。将您希望它成为jsonarray的字符串放入。我正在使用这个字符串body=new string response.body.toString.getBytes;输出显示:body[模型。Store@4996fa8模型Store@949eac1模型Store@c45f266模型Store@a8779a7模型Store@e9de54模型Store@e4971fd,所以我很接近,但我仍然不知道如何修复它..你的东西也给了我这个作为输出:[模型。Store@4996fa8模型Store@949eac1模型Store@c45f266,这里是:JSONArray j=new-JSONArrayresponse.body.toString;伙计,你真的误导了我们。我想帮助你强硬:Response-Response,正如你所看到的,Response-Response有一个存储对象列表。你不需要JSONArray。这个响应是你编写的自定义类?你需要响应中的列表对象,您不需要jsonarray。对“我的答案”的最后一次编辑将明确解决您的问题。检查更新的答案是否可以删除除包含[model]的注释之外的注释。Store@4996fa8模型Store@949eac1模型Store@c45f266 ,