如何使用org.json.simple包在Java中读取JSON文件

时间:2014-02-19 17:54:45

标签: java json

我将获得facebook read_books 该文件采用以下格式:

{
   "data": [
      {
         "id": "270170479804513",
         "from": {
            "name": "L I",
            "id": "1000022"
         },
         "start_time": "2014-01-22T09:31:00+0000",
         "publish_time": "2014-01-22T09:31:00+0000",
         "application": {
            "name": "Books",
            "id": "174275722710475"
         },
         "data": {
            "book": {
               "id": "133556360140246",
               "url": "https://www.facebook.com/pages/Pride-and-Prejudice/133556360140246",
               "type": "books.book",
               "title": "Pride and Prejudice"
            }
         },
         "type": "books.reads",
         "no_feed_story": false,
         "likes": {
            "count": 0,
            "can_like": true,
            "user_likes": false
         },
         "comments": {
            "count": 0,
            "can_comment": true,
            "comment_order": "chronological"
         }
      },
      {
         "id": "270170328",
         "from": {
            "name": "h",
            "id": "100004346894022"
         },
         "start_time": "2014-01-22T09:29:42+0000",
         "publish_time": "2014-01-22T09:29:42+0000",
         "application": {
            "name": "Books",
            "id": "174275722710475"
         },
         "data": {
            "book": {
               "id": "104081659627680",
               "url": "https://www.facebook.com/pages/Gulistan-of-Sadi/104081659627680",
               "type": "books.book",
               "title": "Gulistan of Sa'di"
            }
         },
         "type": "books.reads",
         "no_feed_story": false,
         "likes": {
            "count": 0,
            "can_like": true,
            "user_likes": false
         },
         "comments": {
            "count": 0,
            "can_comment": true,
            "comment_order": "chronological"
         }
      }
   ],

我需要书籍标题及其网址。我运行下面的代码,但我在线程“main”中得到Exception java.lang.ClassCastException:org.json.simple.JSONObject不能转换为java.lang.String

 while ((inputLine = in.readLine()) != null)
    {
     s = s + inputLine + "\r\n";
     if (s == null) {
    break;
     }
    t = t + inputLine + "\r\n";
    }
    in.close();
    t = t.substring(0, t.length() - 2);
   System.out.println(t);
   Object dataObj =JSONValue.parse(t);

 System.out.println(dataObj);
JSONObject dataJson = (JSONObject) dataObj;
JSONArray data = (JSONArray) dataJson.get("data");
for (Object o: data)
{
    JSONObject indata= (JSONObject) o;
    Object indatafirst=(JSONObjec`enter code here`t).get("0");
    String inndata=(String) indatafirst.get("data");
    System.out.println("inndata"+inndata);
}}

但事实并非如此

1 个答案:

答案 0 :(得分:1)

问题出在以下几行:

String inndata=(String) indatafirst.get("data");

JSON中的data字段不是String,它是嵌套的JSON对象。

"data": {
            "book": {
               "id": "104081659627680",
               "url": "https://www.facebook.com/pages/Gulistan-of-Sadi/104081659627680",
               "type": "books.book",
               "title": "Gulistan of Sa'di"
            }
 }

这解释了您的ClassCastException。

相反,你应该做类似的事情:

JSONObject data = (JSONObject) indatafirst.get("data");
JSONObject book = (JSONObject) data.get("book");
String bookTitle = book.get("title");