繁体   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