2015-11-20 143 views
0

我試圖從URL中獲取數據,並使用下面的代碼將其存儲在JSON格式:如何從URL獲取數據並將其轉換爲json?

String fullURL="http://XXX:8101/Myapp/XXX/XXX"; 

     URL u = new URL(fullURL); 
      System.out.println(fullURL); 
      HttpURLConnection huc = (HttpURLConnection) u.openConnection(); 
      System.out.println("Message :"+huc.getResponseMessage()); 
      JSONParser parser = new JSONParser(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(huc.getInputStream())); 

      JSONArray a = (JSONArray) parser.parse(rd); 

      for (Object o : a) 
      { 
       org.json.simple.JSONObject device = (org.json.simple.JSONObject) o; 



       double kw = (double) device.get("value"); 
       System.out.println(kw); 
       //getKw().setKw(kw); 

       String sensortype = (String) device.get("senorType "); 
       System.out.println(sensortype); 
       //getSensorType().setSenorType(sensortype); 

       Timestamp dateTime = (Timestamp) device.get("serverTimeStamp"); 
       System.out.println(dateTime); 
       //getServerTimeStamp().setServerTimeStamp(dateTime); 

    } 

但我收到以下錯誤:

java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray. 

什麼我做錯了,如何解決這個問題?

我改變了基於用戶評論最後我的數組是:

[ 
    { 

    "value": 777, 
    "percentage": 0, 
    "serverTimeStamp": 1436900289000, 
    "sensorType": "S" 

    }, 
    { 
    "value": 777, 
    "percentage": 0, 
    "serverTimeStamp": 1436900289000, 
    "sensorType": "V" 
    }, 
    { 
    "value": 777, 
    "percentage": 0, 
    "serverTimeStamp": 1436900289000, 
    "sensorType": "R" 
    } 
] 

爲什麼我得到一個java.lang.ClassCastException:java.lang.Long中不能轉換爲java.lang.Double中例外?

+0

您可以將JSON字符串你的問題? – Dev

+0

從異常它看起來像響應是JSON對象像{「名稱」:「xyz」}而不是像[{「name」:「xyz」}]]的JSON數組。請打印內容並在此處發佈。 –

+0

你是對的@RishiSaraf。我改變了我的代碼,請現在看看。 – MMMMS

回答

1

看你的代碼後,你想在double這是wrong投價值,你會得到long instate的double試圖獲得的價值時鍵"value"JSONObject。要獲得您的慾望結果首先投射到long,然後在double

double kw = (double)((long) device.get("value")); 

我觀察到的是你想投的關鍵"serverTimeStamp"價值Timestamp這是wrong其他的事情,instate你會得到long的你必須創建時間戳的新實例。

Timestamp dateTime = new Timestamp ((long) device.get("serverTimeStamp")); 
+0

你是對的。它的工作現在很好。謝謝。 – MMMMS

1

device.get("value")正在返回Long的值,這是Double的情況。

所以改成這樣:

long kw = (long) device.get("value");

0

爲什麼不這樣做呢。

((Number) device.get("value")).doubleValue(); 

你將永遠不會投類如果返回instace是一個數字如int,長,浮動例外,雙等

相關問題