从jsonarray创建的jsonobject总是空的错误不是空的

时间:2016-09-16 08:06:41

标签: 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());
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次&#34; {}&#34;。

任何帮助?

这是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"
}
]}

2 个答案:

答案 0 :(得分:2)

只需更换此

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

用这个

JSONObject article = articles.optJSONObject(i);

确实,构造函数new JSONObject(Object)会通过调用所提供对象的所有公共getter 来动态填充JSONObject实例,换句话说,它假定提供的对象是实际上是一个 Java Bean ,如果你提供JSONObject则不是这样。

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

  

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

答案 1 :(得分:0)

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