简体   繁体   English

错误类型 JSONArray 无法转换为 JSONObject

[英]error type JSONArray cannot be converted to JSONObject

I'm creating an app to get posts from a web server, and i'm getting a jsonarray to object error I'm new to android development and tutorials i see the JsonArray is named before, so it'd be array of dogs, and then inside that would have breed and name and so on, mines not named.我正在创建一个应用程序来从 web 服务器获取帖子,并且我正在获取一个 jsonarray 到 object 错误我是 ZC31B32364CE19CA8FCD150A417ECCE,58Z 开发和教程的新手,所以之前我看到了 JsonArray然后里面会有品种和名称等等,没有命名的地雷。

the code i have is我的代码是

public class GetData extends AsyncTask<String, String, String>{

@Override
protected String doInBackground(String... strings) {
    String current = "";
    try{
        URL url;
        HttpURLConnection urlConnection = null;
        try{
            url = new URL(JSONURL);
            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = urlConnection.getInputStream();
            InputStreamReader isr = new InputStreamReader(in);

            int data = isr.read();
            while(data !=-1){
                current += (char) data;
                data = isr.read();
            }
            return current;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            if(urlConnection !=null){
                urlConnection.disconnect();;
            }
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return current;
}

@Override
protected void onPostExecute(String s) {
    try{
        JSONObject jsonObject = new JSONObject(s);
        JSONArray jsonArray = jsonObject.getJSONArray("");
        for(int i = 0; i<jsonArray.length();i++){
            JSONObject jsonObject1= jsonArray.getJSONObject(i);
            namey = jsonObject1.getString("name");
            post = jsonObject1.getString("post");

            //hashmap
            HashMap<String, String> posts = new HashMap<>();
            posts.put("name", namey);
            posts.put("post", post);
            postList.add(posts);

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    //Displaying the results
    ListAdapter adapter = new SimpleAdapter(
            MainActivity.this,
            postList,
            R.layout.item,
            new String[]{"name", "post"},
            new int[]{R.id.textView, R.id.textView2});
    lv.setAdapter(adapter);
}
}

the json code i'm trying to parse is我试图解析的 json 代码是

[
    {
        "0": "2",
        "id": "2",
        "1": "anon",
        "name": "anon",
        "2": "goodbye people of skivecore",
        "post": "goodbye people of skivecore",
        "3": "38.751053",
        "lat": "38.751053",
        "4": "-90.432915",
        "lng": "-90.432915",
        "5": "",
        "ip": "",
        "6": "6.204982836749738",
        "distance": "6.204982836749738"
    },
    {
        "0": "1",
        "id": "1",
        "1": "anon",
        "name": "anon",
        "2": "hello people of skivecore",
        "post": "hello people of skivecore",
        "3": "38.744453",
        "lat": "38.744453",
        "4": "-90.607986",
        "lng": "-90.607986",
        "5": "",
        "ip": "",
        "6": "9.280600590285143",
        "distance": "9.280600590285143"
    }
]

and stacktrace message和堆栈跟踪消息

2021-04-28 23:45:02.156 20352-20352/com.skivecore.secrets W/System.err: org.json.JSONException: Value [{"0":"2","id":"2","1":"anon","name":"anon","2":"goodbye people of skivecore","post":"goodbye people of skivecore","3":"38.751053","lat":"38.751053","4":"-90.432915","lng":"-90.432915","5":"","ip":"","6":"6.204982836749738","distance":"6.204982836749738"},{"0":"1","id":"1","1":"anon","name":"anon","2":"hello people of skivecore","post":"hello people of skivecore","3":"38.744453","lat":"38.744453","4":"-90.607986","lng":"-90.607986","5":"","ip":"","6":"9.280600590285143","distance":"9.280600590285143"}] of type org.json.JSONArray cannot be converted to JSONObject

You should use like below你应该像下面这样使用

try {
        JSONArray jsonArray = new JSONArray(s);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
            namey = jsonObject1.getString("name");
            post = jsonObject1.getString("post");

            //hashmap
            HashMap<String, String> posts = new HashMap<>();
            posts.put("name", namey);
            posts.put("post", post);
            postList.add(posts);

        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

I think here is the issue JSONObject jsonObject = new JSONObject(s);我认为这是问题JSONObject jsonObject = new JSONObject(s); as I can see your response is a JSONArray because it has [ and ] at the beginning and the end.正如我所见,您的响应是 JSONArray,因为它的开头和结尾都有[]

So, I think this would be more appropriate.所以,我认为这会更合适。

try{
        JSONArray jsonArray = jsonObject.getJSONArray(s);
        for(int i = 0; i<jsonArray.length();i++){
            JSONObject jsonObject1= jsonArray.getJSONObject(i);
            namey = jsonObject1.getString("name");
            post = jsonObject1.getString("post");

            //hashmap
            HashMap<String, String> posts = new HashMap<>();
            posts.put("name", namey);
            posts.put("post", post);
            postList.add(posts);

        }
    }

please usding gson library To use jasonArray And JsonObject Easley请使用gson库来使用 jasonArray 和 JsonObject Easley

1). 1)。 https://github.com/google/gson https://github.com/google/gson

2). 2)。 libraby import then use libraby 导入然后使用

https://www.jsonschema2pojo.org/ https://www.jsonschema2pojo.org/

for your jsonArray to Model class为您的 jsonArray 到 Model class

Then Use jsonArray然后使用 jsonArray

Use this instead....改用这个....

try {
    JSONArray jsonArray = new JSONArray(s);
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject1 = jsonArray.getJSONObject(i);
        namey = jsonObject1.getString("name");
        post = jsonObject1.getString("post");

        //put to hashmap
        HashMap<String, String> posts = new HashMap<>();
        posts.put("name", namey);
        posts.put("post", post);
        postList.add(posts);

    }

} catch (JSONException e) {
e.printStackTrace();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM