2015-12-04 182 views
0

我正在開發一個使用光滑2D lwjgl的小型側面滾輪遊戲,並且在投射某物時遇到當前錯誤。轉換鑄造問題

它似乎沒有認識到我正在將json字符串轉換爲JsonArray。

錯誤和功能,

java.lang.ClassCastException: java.lang.String cannot be cast to org.json.simple.JSONArray 
    at world.World.load(World.java:35) 
    at game.Engine.initStatesList(Engine.java:64) 
    at org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:164) 

功能:

public static void load(String path) throws Exception 
{ 
    JSONParser parser = new JSONParser(); 
    Object obj = parser.parse(new FileReader(path)); 
    JSONObject jSonOBJ = (JSONObject)obj; 

    JSONArray layers = (JSONArray)jSonOBJ.get("layers"); 
    int amount = layers.size(); 

    for (int i = 0; i < amount; ++i) 
    { 
     JSONObject layer = (JSONObject) layers.get(i); 
     String type = (String)layer.get("name"); 

     if (type.equals("solids")) 
     { 
      solids = parse((JSONArray)layer.get("data")); //error 
     } 
     else if (type.equals("spawns")) 
     { 
      //to-do 
     } 
    } 
} 

這只是解析,如果JSON,我的地圖,瓷磚是固體或沒有,但我一直在堅持在這個小小的錯誤一段時間。代碼行solids = parse((JSONArray)layer.get("data"));應該將其轉換爲JSONArray正確嗎?

回答

0

有很多方法讓對象阻止你每次都投射。方法getJSONArray將允許你直接有一個JSONArray。

這裏是this post採取了一個例子:

JSONObject jsnobject = new JSONObject(yourString); 
JSONArray jsonArray = jsnobject.getJSONArray("nameOfArrayAttribute"); 
    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject explrObject = jsonArray.getJSONObject(i); 
} 

這裏可以看到,你只需要從你的字符串BUIL您的JSON對象。然後你可以用特定的方法提取你的文檔來獲得強類型的對象。

+0

仍然有這個問題,'圖像[] []固體'是我的二維數組圖像。我簡單地調用''solids ='然後解析,'parse((JSONArray)layer'圖層是一個包含實體索引之一的JSONObject,'.get(「data」)'.get通過在我的JSON請求的圖層對象內找到的關鍵「數據」 – SenjuXo

+0

您可以提供您的JSON文本嗎?並且您是否試過跳過這個強制轉換並調用'solids = layer.getJSONArray(「data」);'' – RPresle