Java 从jsonarray not empty创建的jsonobject始终为空时出错
我不明白为什么不能从jsonarray创建有效的jsonobjectJava 从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
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);