首页 > 解决方案 > org.json.JSONException:值org.json.JSONArray 类型的无法转换为 JSONObject

问题描述

我是使用 API 和 JSON 文件的新手。我通过观看一些教程将这段代码放在一起,但在这一点上卡住了。这是代码:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
             try {
                JSONArray jsonArray = response.getJSONArray("articles");
                Log.d("1", "onResponse: Success before loop");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject hit = jsonArray.getJSONObject(i);
                    //JSONArray
                    Log.d("1", "onResponse: Inside the loop");

                    String title = hit.getString("title");
                    String imageUrl = hit.getString("imageURL");
                    String article = hit.getString("content");
                    String author = hit.getString("author");
                    String date = hit.getString("time");
                    mExampleList.add(new ExampleItem(imageUrl, title, article, author, date));
                }
                mExampleAdapter = new ExampleAdapter(MainActivity.this, mExampleList);
                mRecyclerView.setAdapter(mExampleAdapter);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("1", "onErrorResponse: Error response");
            error.printStackTrace();
        }
    });
mRequestQueue.add(request);

这是我收到的 JSON 数组:

[
    {
        "language": "Hindi",
        "title": "\"स्वदेशी हथियारों का निर्यात करेगी भारत सरकार, राजनयिक संबंधों का भी करेगी इस्तेमाल\"",
        "location": "Dhanbad",
        "link": "mysite2.com",
        "international": false,
        "time": "20\/5\/2020",
        "imageURL": "https:\/\/cdn.pixabay.com\/user\/2014\/11\/30\/13-45-12-52_250x250.jpg",
        "content": "\"स्वदेशी हथियारों का निर्यात करेगी भारत सरकार, राजनयिक संबंधों का भी करेगी इस्तेमाल\"  नई दिल्ली: भारत सरकार ने स्वदेशी हथियारों ( Indigenous Developed weapons) और सैन्य साजो सामान को निर्यात करने की रणनीति बनाई है, जिसमें भारत सरकार अपने राजनयिक संबंधों का भी इस्तेमाल करेगी, रक्षा मंत्रालय से जुड़े सूत्रों ने यह जानकारी दी,रक्षा उत्पादन विभाग के सचिव राजकुमार ने एक वेबिनार में कहा कि भारत सरकार मित्र देशों के राजनयिकों से संपर्क स्थापित कर यह जानने की रणनीति बना रही है कि उन्हें किस तरह के हथियारों और रक्षा सौदों की जरूरत है. ताकि भारतीय उत्पादक उनके हिसाब से रक्षा सामग्री का निर्माण कर सकें। कुमार ने कहा कि भारत सरकार अपने रक्षा प्रतिनिधियों, दूतावासों और राजनयिक चैनलों का इस्तेमाल मेक इन इंडिया के तहत बनाए जाने वाले हथियारों के निर्यात को बढ़ाने में करेगी।&quot;,
        "author": "Sova"
    }
]

我无法在这里弄清楚这个问题。我知道这里有一个非常小的问题。我希望你能在这里帮助我。

这是完整的 JSON:

{
    "articles": {
        "PHcgUZAwEHRlVZKXtxph": {
            "international": true,
            "imageURL": "https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
            "location": "all",
            "link": "mysite2.com",
            "time": "23/4/58",
            "language": "English",
            "author": "Rze",
            "content": "Last Article I Promise",
            "title": "Lorem Ipsum v3"
       },
       "PeIutXkKrL4Fftku6mKf": {
            "language": "English",
            "content": "Last Article I Promise",
            "author": "USAID",
            "locatoin": "Lucknow",
            "time": "24/07/2020",
            "imageURL": "https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
            "link": "mysite2.com",
            "title": "Lorem Ipsum v3"
        },
        "bmhhMM0meX98dP8JAJWk": {
            "location": "Lucknow",
            "title": "Lorem Ipsum v3",
            "language": "English",
            "imageURL": "https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
            "time": "24/5/2001",
            "content": "Last Article I Promise",
            "international": false,
            "link": "mysite2.com",
            "author": "Mohd Usaid"
        },
        "p8ayMlH9i6HUVqaQUiKW": {
            "international": false,
            "title": "\"स्वदेशी हथियारों का निर्यात करेगी भारत सरकार, राजनयिक संबंधों का भी करेगी इस्तेमाल\"",
            "language": "Hindi",
            "link": "mysite2.com",
            "content": "\"स्वदेशी हथियारों का निर्यात करेगी भारत सरकार, राजनयिक संबंधों का भी करेगी इस्तेमाल\"  नई दिल्ली: भारत सरकार ने स्वदेशी हथियारों ( Indigenous Developed weapons) और सैन्य साजो सामान को निर्यात करने की रणनीति बनाई है, जिसमें भारत सरकार अपने राजनयिक संबंधों का भी इस्तेमाल करेगी, रक्षा मंत्रालय से जुड़े सूत्रों ने यह जानकारी दी,रक्षा उत्पादन विभाग के सचिव राजकुमार ने एक वेबिनार में कहा कि भारत सरकार मित्र देशों के राजनयिकों से संपर्क स्थापित कर यह जानने की रणनीति बना रही है कि उन्हें किस तरह के हथियारों और रक्षा सौदों की जरूरत है. ताकि भारतीय उत्पादक उनके हिसाब से रक्षा सामग्री का निर्माण कर सकें। कुमार ने कहा कि भारत सरकार अपने रक्षा प्रतिनिधियों, दूतावासों और राजनयिक चैनलों का इस्तेमाल मेक इन इंडिया के तहत बनाए जाने वाले हथियारों के निर्यात को बढ़ाने में करेगी।&quot;,
            "location": "Dhanbad",
            "imageURL": "https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
            "author": "Sova",
            "time": "20/5/2020"
        }
    }
}

标签: javaandroidjsonandroid-studio

解决方案


既然您提到这是一个自定义 JSON。您需要更改 JSON 本身以使您的代码正常工作。

{
  "articles":[ //this needs to be array not object
     {
        "international":true,
        "imageURL":"https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
        "location":"all",
        "link":"mysite2.com",
        "time":"23/4/58",
        "language":"English",
        "author":"Rze",
        "content":"Last Article I Promise",
        "title":"Lorem Ipsum v3"
     },
     {
        "language":"English",
        "content":"Last Article I Promise",
        "author":"USAID",
        "locatoin":"Lucknow",
        "time":"24/07/2020",
        "imageURL":"https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
        "link":"mysite2.com",
        "title":"Lorem Ipsum v3"
     },
     {
        "location":"Lucknow",
        "title":"Lorem Ipsum v3",
        "language":"English",
        "imageURL":"https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
        "time":"24/5/2001",
        "content":"Last Article I Promise",
        "international":false,
        "link":"mysite2.com",
        "author":"Mohd Usaid"
     },
     {
        "international":false,
        "title":"\"स्वदेशी हथियारों का निर्यात करेगी भारत सरकार, राजनयिक संबंधों का भी करेगी इस्तेमाल\"",
        "language":"Hindi",
        "link":"mysite2.com",
        "content":"\"स्वदेशी हथियारों का निर्यात करेगी भारत सरकार, राजनयिक संबंधों का भी करेगी इस्तेमाल\"  नई दिल्ली: भारत सरकार ने स्वदेशी हथियारों ( Indigenous Developed weapons) और सैन्य साजो सामान को निर्यात करने की रणनीति बनाई है, जिसमें भारत सरकार अपने राजनयिक संबंधों का भी इस्तेमाल करेगी, रक्षा मंत्रालय से जुड़े सूत्रों ने यह जानकारी दी,रक्षा उत्पादन विभाग के सचिव राजकुमार ने एक वेबिनार में कहा कि भारत सरकार मित्र देशों के राजनयिकों से संपर्क स्थापित कर यह जानने की रणनीति बना रही है कि उन्हें किस तरह के हथियारों और रक्षा सौदों की जरूरत है. ताकि भारतीय उत्पादक उनके हिसाब से रक्षा सामग्री का निर्माण कर सकें। कुमार ने कहा कि भारत सरकार अपने रक्षा प्रतिनिधियों, दूतावासों और राजनयिक चैनलों का इस्तेमाल मेक इन इंडिया के तहत बनाए जाने वाले हथियारों के निर्यात को बढ़ाने में करेगी।&quot;,
        "location":"Dhanbad",
        "imageURL":"https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
        "author":"Sova",
        "time":"20/5/2020"
     }
  ]
}

使您articles的数组而不是对象。尝试从您的文章对象名称中删除这些随机键名称。您的 java 代码很好,它的自定义 JSON 有问题。


推荐阅读