【问题标题】:org.json.JSONException: Value <JSONarray-here> of type org.json.JSONArray cannot be converted to JSONObjectorg.json.JSONException: org.json.JSONArray 类型的值 <JSONarray-here> 无法转换为 JSONObject
【发布时间】:2020-10-09 07:47:18
【问题描述】:

我是使用 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) और सैन्य साजो सामान को निर्यात करने की रणनीति बनाई है, जिसमें भारत सरकार अपने राजनयिक संबंधों का भी इस्तेमाल करेगी, रक्षा मंत्रालय से जुड़े सूत्रों ने यह जानकारी दी,रक्षा उत्पादन विभाग के सचिव राजकुमार ने एक वेबिनार में कहा कि भारत सरकार मित्र देशों के राजनयिकों से संपर्क स्थापित कर यह जानने की रणनीति बना रही है कि उन्हें किस तरह के हथियारों और रक्षा सौदों की जरूरत है. ताकि भारतीय उत्पादक उनके हिसाब से रक्षा सामग्री का निर्माण कर सकें। कुमार ने कहा कि भारत सरकार अपने रक्षा प्रतिनिधियों, दूतावासों और राजनयिक चैनलों का इस्तेमाल मेक इन इंडिया के तहत बनाए जाने वाले हथियारों के निर्यात को बढ़ाने में करेगी।",
        "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) और सैन्य साजो सामान को निर्यात करने की रणनीति बनाई है, जिसमें भारत सरकार अपने राजनयिक संबंधों का भी इस्तेमाल करेगी, रक्षा मंत्रालय से जुड़े सूत्रों ने यह जानकारी दी,रक्षा उत्पादन विभाग के सचिव राजकुमार ने एक वेबिनार में कहा कि भारत सरकार मित्र देशों के राजनयिकों से संपर्क स्थापित कर यह जानने की रणनीति बना रही है कि उन्हें किस तरह के हथियारों और रक्षा सौदों की जरूरत है. ताकि भारतीय उत्पादक उनके हिसाब से रक्षा सामग्री का निर्माण कर सकें। कुमार ने कहा कि भारत सरकार अपने रक्षा प्रतिनिधियों, दूतावासों और राजनयिक चैनलों का इस्तेमाल मेक इन इंडिया के तहत बनाए जाने वाले हथियारों के निर्यात को बढ़ाने में करेगी।",
            "location": "Dhanbad",
            "imageURL": "https://cdn.pixabay.com/user/2014/11/30/13-45-12-52_250x250.jpg",
            "author": "Sova",
            "time": "20/5/2020"
        }
    }
}

【问题讨论】:

  • 你的 json 中的articles 在哪里?
  • 由于JSON以[开头,表示一个数组,所以响应是JSONArray,而不是JSONObject,所以改成new Response.Listener&lt;JSONArray&gt;() { @Override public void onResponse(JSONArray response) {。 --- 当 JSON 响应中没有 "articles" 时,不知道您是如何想到 getJSONArray("articles") 的。

标签: java android json android-studio


【解决方案1】:

既然您提到这是一个自定义 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) और सैन्य साजो सामान को निर्यात करने की रणनीति बनाई है, जिसमें भारत सरकार अपने राजनयिक संबंधों का भी इस्तेमाल करेगी, रक्षा मंत्रालय से जुड़े सूत्रों ने यह जानकारी दी,रक्षा उत्पादन विभाग के सचिव राजकुमार ने एक वेबिनार में कहा कि भारत सरकार मित्र देशों के राजनयिकों से संपर्क स्थापित कर यह जानने की रणनीति बना रही है कि उन्हें किस तरह के हथियारों और रक्षा सौदों की जरूरत है. ताकि भारतीय उत्पादक उनके हिसाब से रक्षा सामग्री का निर्माण कर सकें। कुमार ने कहा कि भारत सरकार अपने रक्षा प्रतिनिधियों, दूतावासों और राजनयिक चैनलों का इस्तेमाल मेक इन इंडिया के तहत बनाए जाने वाले हथियारों के निर्यात को बढ़ाने में करेगी।",
        "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 有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2017-01-03
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多