2

谁能告诉我如何从每个元标记中获取og:descriptionog:titlebook:release_datebook:author和的值?book:isbn(请参阅下面的 JSON 内容)最终这些值将显示在表格中,因此我需要将它们作为 Java 对象(字符串)..

到目前为止,我已经尝试过使用许多外部库,但这是我第一个使用 JSON 的项目,所以我不明白它们是如何工作的。

供您参考,我正在使用 NetBeans 并正在制作一个安静的 Web 服务。

我已经设法使用以下代码将它们转换为 JSON 字符串:

    JSONObject obj = new JSONObject(builder.toString());
    String theJsonString = obj.toString();

但是当我尝试这样做时:

    ObjectMapper mapper = new ObjectMapper();
                  Map<String,Object> data = mapper.readValue(theJsonString.getBytes(), Map.class);
                  Map items = (Map) data.get("items");
                  Map pagemap = (Map) items.get("pagemap");
                  Map metatags = (Map) pagemap.get("metatags");
                  String b_title = (String) metatags.get("og:title");

     System.out.println(b_title);

我收到此错误:

java.lang.ClassCastException:java.util.ArrayList 无法在 API.GCustSearchAPI.main(GCustSearchAPI.java:77) 处转换​​为 java.util.Map

第 77 行是这样的:

Map items = (Map) data.get("items");

这是json内容:

{
"items": [
{
"pagemap": {
"metatags": [
 {
  "og:description": "A boxed set, including the titles 'Harry Potter and the Philosopher's Stone', 'Harry Potter and the Chamber of Secrets', 'Harry Potter and the Prisoner of Azkaban', 'Harry Potter and the Goblet of Fire', 'Harry Potter and the Order of the Phoenix', 'Harry Potter and the Half-Blood Prince' and 'Harry Potter and the Deathly Hallows'.",
  "og:title": "Harry Potter Adult Paperback Boxed Set: Adult Edition (Paperback)",
  "book:release_date": "2008-10-06",
  "book:author": "J. K. Rowling",
  "book:isbn": "9780747595847"
 }
]
}
},
 {
"pagemap": {
"metatags": [
 {
  "og:description": "Offers an in-depth look at the craftsmanship, artistry, technology, and more than ten-year journey that took the world's bestselling fiction from page to screen. From elaborate sets and luxurious costumes to advanced special effects and film making techniques, this title chronicles all eight films.",
  "og:title": "Harry Potter: Page to Screen (Hardback)",
  "book:release_date": "2011-10-25",
  "book:author": "Bob McCabe",
  "book:isbn": "9780857687753"
 }
 ]
}
 }
 ]
}

任何输入将不胜感激。请以简单的方式告诉我,因为我是初学者(刚接触 NetBeans 2 个月)。非常感谢!!!

4

2 回答 2

0

如果看jsonitems是一个数组,对应的java表示就是一个List。所以你需要 fetchitems作为List

List items = (List ) data.get("items");

metatags同样的逻辑也适用于

List metatags = (List) pagemap.get("metatags");

通过上述更改,试试这个

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> data = mapper.readValue(file, Map.class);
List<Map<String, Object>> items = (List) data.get("items");
for (Map<String, Object> item : items) {
    Map pagemap = (Map) item.get("pagemap");
    List<Map<String, Object>> metatags = (List) pagemap.get("metatags");
    for (Map<String, Object> tag : metatags) {
        String b_title = (String) tag.get("og:title");
        System.out.println(b_title);
    }

}
于 2013-04-03T08:54:25.273 回答
0

创建一个 java 类,即 item.java 并编写该行

Item item= mapper.readValue(new File(theJsonString.getBytes()), Item .class);

然后读取json

于 2013-04-03T08:58:37.130 回答