2012-02-12 51 views
0

我正在試圖遍歷文件系統中包含大量設備配置信息的文件。json-simple,從文件中讀取

文件的格式如下:

{ 
    "myDevicesInfo": 
    [ 
     { 
      "DeviceType":"foo", 
      "DeviceName":"foo1", 
      "IPAddress":"192.168.1.1", 
      "UserName":"admin", 
      "Password":"pw" 
     } 
    ] 
} 

我正在試圖讓內鍵值對的時候出現以下錯誤:在線程

異常「主要的」 java .lang.ClassCastException:org.json.simple.JSONArray無法轉換爲org.json.simple.JSONObject at mav2bac.loadDevices(bac.java:98) at mav2bac.main(bac.java:70)

File appBase = new File("."); //current directory 
      String path = appBase.getAbsolutePath(); 
      System.out.println(path); 

      Object obj = parser.parse(new FileReader("bac.yml")); 

      JSONObject jsonObject = (JSONObject) obj; 
      JSONObject jsonObjectDevice = (JSONObject)jsonObject; 
      JSONObject deviceAttributes = (JSONObject) jsonObject.get("myDevicesInfo"); 

      Map json = (Map)parser.parse(jsonObject.toJSONString(), containerFactory); 
      System.out.println(json.values()); 
      Iterator iter = json.entrySet().iterator(); 
      System.out.println("==iterate result=="); 
      while(iter.hasNext()){ 
       Map.Entry entry = (Map.Entry)iter.next(); 
       //System.out.println(entry.getKey() + "=>" + entry.getValue()); 
       System.out.println(entry.getValue()); 
      } 

那麼,什麼是正確的方式來獲得轉換使用ContainerFactory通過與實例包含這些值的對象?


回答

3

問題是myDevicesInfo是一個json對象數組而不是json對象。所以下面一行:

JSONObject deviceAttributes = (JSONObject) jsonObject.get("myDevicesInfo"); 

需要改變到

JSONArray deviceAttributes = (JSONArray) jsonObject.get("myDevicesInfo"); 
+0

與錯誤幫助了,但現在,我怎麼去鍵值對? – bentaisan 2012-02-13 00:26:00

+0

JSONArray是Java List,因此您可以按照迭代List的相同方式對它進行迭代。 – 271828183 2012-02-13 02:30:30

+0

這是我得到的輸出:myDevicesInfo = [{DeviceType = bac,DeviceName = bac,IPAddress = 192.168.1.1,UserName = admins,Password = pw}]。我想獲取方括號中的值。 – bentaisan 2012-02-13 17:06:16

2

試試這個:

JSONParser parser = new JSONParser(); 
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(pathToJsonFile)); 
JSONArray features = (JSONArray) jsonObject.get("myDevicesInfo"); 
Iterator itr=features.iterator(); 

while(itr.hasNext()){ 
    JSONObject featureJsonObj = (JSONObject)itr.next(); 
    String deviceType = (String)featureJsonObj.get("DeviceType"); 
    String deviceName = (String) featureJsonObj.get("DeviceName"); 
    String ipadd = (String) featureJsonObj.get("IPAddress"); 
    String uname = (String) featureJsonObj.get("UserName"); 
    String pwd = (String) featureJsonObj.get("Password");      
} 
+0

這是哪一個圖書館? JSONParser不在默認的org.json庫中 – 2016-10-08 20:57:11