Java 从jsonarray not empty创建的jsonobject始终为空时出错

Java 从jsonarray not empty创建的jsonobject始终为空时出错,java,arrays,json,jsonobject,Java,Arrays,Json,Jsonobject,我不明白为什么不能从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

我不明白为什么不能从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);
}
简单地替换这个

JSONObject article = new JSONObject(articles.optJSONObject(i));
用这个

JSONObject article = articles.optJSONObject(i);
实际上,构造函数将通过调用所提供对象的所有公共getter动态填充
JSONObject
实例,换句话说,它假设所提供的对象实际上是javabean,如果提供
JSONObject
,则情况并非如此

这里提醒您的是该构造函数的Javadoc:

使用bean getter从
对象构建
JSONObject
。它反映了 关于对象的所有公共方法。对于每种方法 没有参数且名称以“
get
”或“
is
”开头,后跟 一个大写字母,调用方法,以及一个键和值 从getter方法返回的数据被放入新的
JSONObject
。这个 键是通过删除“
get
”或“
is
”前缀形成的。如果第二个 剩余字符不是大写,则第一个字符是 转换成小写。例如,如果一个对象有一个名为 “
getName
”,如果调用
object.getName()
的结果是“
Larry
Fine
”,则
JSONObject
将包含“
name
”:“
Larry Fine


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

JSONObject article = articles.optJSONObject(i);