2016-11-30 89 views
2

目前我正在使用NetBeans IDE。我嘗試過使用其他解決方案,但到目前爲止沒有運氣。解析Chrome書籤Json文件:Java

問題是,我面對錯誤時,試圖從谷歌Chrome瀏覽器書籤閱讀JSON文件文件(C:\用戶\管理\應用程序數據\本地\谷歌\鍍鉻\用戶數據\ DEFAULT \書籤)

p/S:雖然沒有寫在書籤的名稱的文件類型,其內容已被稱爲JSON

這是什麼裏面的Bookmarks.json:

{ 
    "checksum": "20fdfad51db6d3199f8a09c3220dd93b", 
    "roots": { 
     "bookmark_bar": { 
     "children": [ { 
      "date_added": "13124893413824227", 
      "id": "6", 
      "name": "YouTube", 
      "type": "url", 
      "url": "https://www.youtube.com/" 
     }, { 
      "date_added": "13124893435163243", 
      "id": "7", 
      "name": "Welcome to Facebook", 
      "type": "url", 
      "url": "https://www.facebook.com/" 
     } ], 
     "date_added": "13124893381424539", 
     "date_modified": "13124893435163243", 
     "id": "1", 
     "name": "Bookmarks bar", 
     "type": "folder" 
     }, 
     "other": { 
     "children": [ ], 
     "date_added": "13124893381424547", 
     "date_modified": "0", 
     "id": "2", 
     "name": "Other bookmarks", 
     "type": "folder" 
     }, 
     "synced": { 
     "children": [ ], 
     "date_added": "13124893381424550", 
     "date_modified": "0", 
     "id": "3", 
     "name": "Mobile bookmarks", 
     "type": "folder" 
     } 
    }, 
    "version": 1 
} 

這裏是我的代碼(JsonParser.java):

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Iterator; 
import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 
import org.json.simple.parser.ParseException; 

public class JsonParser{ 
    private static String jsonFile = "C:\\Users\\Admin\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Bookmarks"; 

    public static void main (String[] args) { 

     try { 
      FileReader reader = new FileReader (jsonFile); //access the file 
      JSONObject jsonObject = (JSONObject) new JSONParser().parse(reader); 

         String c =(String) jsonObject.get("checksum"); //place 
      //  String r =(String) jsonObject.get("roots"); //place 

      // String r =(String) jsonObject.get("children"); //place 


         System.out.println("check: " + c); 
         //System.out.println("roots: " + r); 
         JSONArray lang = (JSONArray) jsonObject.get("roots"); 
      for (int i=0; i<lang.size(); i++) { 
      System.out.println ("Url Name : " + lang.get(i)+"\n"); 
      }  //data in the array 
      } catch (FileNotFoundException e) { 
           e.printStackTrace(); 
        } catch (IOException e) { 
           e.printStackTrace(); 
        } catch (ParseException e) { 
           e.printStackTrace(); 
        } 
    } 
} 

出於某種原因,當我運行的代碼,這些都是我的錯誤:

check: 4d55f8a0888f7dd918a702eda2821ccd 
Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray 
at JsonParser.main(JsonParser.java:28) 
C:\Users\Admin\Documents\NetBeansProjects\Keep-It\nbproject\build-impl.xml:1051: The following error occurred while executing this line: 
C:\Users\Admin\Documents\NetBeansProjects\Keep-It\nbproject\build-impl.xml:805: Java returned: 1 
BUILD FAILED (total time: 2 seconds) 

正如你所看到的,只有校驗成功讀取,但失敗併發出這些錯誤。

你也應該注意到,有一些代碼,我把爲評論,那些事情我試過,但還是得到了錯誤。

我希望任何人都可以幫助我獲得這些工作。 非常感謝您的幫助

+0

'Bookmarks.json'中的'roots'節點實際上是JSONObject,因爲它的值被包含在括號中。{}只有當它的值包含在'[]'方括號中時,才能將節點強制轉換爲JSONArray。 – nazlo

回答

0

根不是JSONArray,而是JSONObject。

所以,你必須做的是

JSONObject lang = jsonObject.get("roots"); 

,然後你有太多通過對象中的所有鍵循環應該是:

  • bookmark_bar
  • 其他
  • 同步
0

它似乎是m e像「根」不是數組,而是查看JSON時的對象。 「兒童」,「bookmark_bar」下是一個數組然而

2

問題是,可以不投目的是陣列狀(JSONArray) jsonObject.get("roots");你必須遵循的結構根據對象和陣列,以便解析如下所示

JSONObject jsonObject = (JSONObject) new JSONParser().parse(reader); 
String checksum =jsonObject.optString("checksum"); 

// get root object 
JSONObject root = jsonObject.getJSONObject("roots"); 

// get root bookmarks object from root 
JSONObject bookmarks = root.getJSONObject("bookmark_bar"); 

// get root children array from bookmarks 
JSONArray childrens = bookmarks.getJSONArray("children"); 

JSONObject temp ; 
    for (int i=0; i<childrens.size(); i++) { 
     // get object using index from childrens array 
     temp = childrens.getJSONObject(i); 

     // get url 
     String url = temp.optString("url"); 
    } 

如你的結構如下

JObject => root 
       root JSONObject has : bookmark_bar JSONObject 
       bookmark_bar JSONObject has : children JSONArray 
       children JSONArray has JSONObject which further has String: url 
+0

@draxius是不是問題解決了? –

+0

是的,我剛剛解決了這個問題。通過改變數組和對象的比例,我解決了它。其他人的建議也與你的建議一樣有用,但與你詳細描述一樣,我可以更容易地理解它。 – user7288944

+0

@ user7288944您爲解決問題所做的具體更改是什麼。我遇到了您指定的相同錯誤。我試圖對Pavneet Singh提出的修改進行修改,但無法編譯。 –