簡體   English   中英

從jsonarray創建的jsonobject總是空的錯誤不是空的

[英]Error with jsonobject always empty created from jsonarray not empty

我不明白為什么我不能從jsonarray創建一個有效的jsonobject。

String data = IOUtils.toString(req.getInputStream(), Charsets.UTF_8);

JSONObject json = new JSONObject(data);
JSONArray articles = json.getJSONArray("articles");
logger.info("Number of articles: " + articles.length());
logger.info("Structure json - " + articles);
for(int i = 0 ; i < articles.length() ; i++){
            JSONObject article = new JSONObject(articles.optJSONObject(i));
            logger.info("Struttura json - " + article);
            //String id          = article.getString("originalLink");
            //System.out.println(id);
}

當我這樣做時,文章包含4個jsonobjects。 長度是4。
但是當我創建一個jsonobject時,它返回4次“{}”。

有幫助嗎?

這是Json:

{"articles": [
{
  "originalLink": "ansa.it/economia/articolo1",
  "date": "dd/mm/yyyy HH:MM:ss",
  "cacheCopyLink": "dfdf.it?aerfmde",
  "author": "Alvaro Tizio",
  "id2": 12345,
  "imagesLink": [
    "http://image1.jpg",
    "http://image2.jpg",
    "http://image3.jpg"
  ],
  "idchaptersList": [
    45656,
    123342,
    2345345
  ],
  "text": "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.",
  "sourceDomain": "sdsdsd.com",
  "title": "a sezione 1.10.33 del \"de Finibus Bonorum et Malorum\", scritto da Cicerone nel 45 AC"
},
{
  "originalLink": "ansa.it/economia/articolo1",
  "date": "dd/mm/yyyy HH:MM:ss",
  "cacheCopyLink": "dfdf.it?aerfmde",
  "author": "Alvaro Tizio",
  "id2": 12345,
  "imagesLink": [
    "http://image1.jpg",
    "http://image2.jpg",
    "http://image3.jpg"
  ],
  "idchaptersList": [
    45656,
    123342,
    2345345
  ],
  "text": "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.",
  "sourceDomain": "sdsdsd.com",
  "title": "a sezione 1.10.33 del \"de Finibus Bonorum et Malorum\", scritto da Cicerone nel 45 AC"
},
{
  "originalLink": "ansa.it/economia/wdfsdf",
  "date": "dd/mm/yyyy HH:MM:ss",
  "cacheCopyLink": "dfdf.it?aerfmde",
  "author": "Alvaro Tizio",
  "id2": 12345,
  "imagesLink": [
    "http://image1.jpg",
    "http://image2.jpg",
    "http://image3.jpg"
  ],
  "idchaptersList": [
    45656,
    123342,
    2345345
  ],
  "text": "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.",
  "sourceDomain": "sdsdsd.com",
  "title": "a sezione 1.10.33 del \"de Finibus Bonorum et Malorum\", scritto da Cicerone nel 45 AC"
},
{
  "originalLink": "ansa.it/economia/wdfsdf",
  "date": "dd/mm/yyyy HH:MM:ss",
  "cacheCopyLink": "dfdf.it?aerfmde",
  "author": "Alvaro Tizio",
  "id2": 12345,
  "imagesLink": [
    "http://image1.jpg",
    "http://image2.jpg",
    "http://image3.jpg"
  ],
  "idchaptersList": [
    45656,
    123342,
    2345345
  ],
  "text": "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.",
  "sourceDomain": "sdsdsd.com",
  "title": "a sezione 1.10.33 del \"de Finibus Bonorum et Malorum\", scritto da Cicerone nel 45 AC"
}
]}

只需更換它

JSONObject article = new JSONObject(articles.optJSONObject(i));

有了這個

JSONObject article = articles.optJSONObject(i);

實際上,構造函數new JSONObject(Object)將通過調用所提供對象的所有公共getter來動態填充JSONObject實例,換句話說,它假定提供的對象實際上是Java Bean ,如果提供JSONObject則不是這種情況。 。

這里提醒的是這個構造函數的Javadoc:

使用bean getterObject構造一個JSONObject 它反映了對象的所有公共方法。 對於沒有參數且名稱以“ get ”或“ is ”開頭,后跟大寫字母的每個方法,將調用該方法,並將一個鍵和從getter方法返回的值放入新的JSONObject 通過刪除“ get ”或“ is ”前綴來形成密鑰。 如果第二個剩余字符不是大寫字母,則第一個字符將轉換為小寫字母。 例如,如果一個對象有一個名為“ getName ”的方法,並且調用object.getName()的結果是“ Larry Fine ”,那么JSONObject將包含“ name ”:“ Larry Fine ”。

使用JSONObject article = articles.optJSONObject(i); 解決了我的問題。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM