从 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 时,它 return 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) 将通过调用所提供对象的所有 public getters 来动态填充您的 JSONObject 实例,在换句话说,它假设提供的对象实际上是一个 Java Bean,如果你提供一个 JSONObject.

则情况并非如此

提醒这里是Java这个构造函数的文档:

Construct a JSONObject from an Object using bean getters. It reflects on all of the public methods of the object. For each of the methods with no parameters and a name starting with "get" or "is" followed by an uppercase letter, the method is invoked, and a key and the value returned from the getter method are put into the new JSONObject. The key is formed by removing the "get" or "is" prefix. If the second remaining character is not upper case, then the first character is converted to lower case. For example, if an object has a method named "getName", and if the result of calling object.getName() is "Larry Fine", then the JSONObject will contain "name": "Larry Fine".

使用 JSONObject article = articles.optJSONObject(i); 解决了我的问题。 谢谢。