2015-12-04 5 views
0

Я разрабатываю небольшую игру скроллинга с использованием slick 2D lwjgl и нахожусь в текущей ошибке при произведении чего-то.Проблемы с литьем при конвертации

Кажется, что не признаю, что я использую json string как 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); 
} 

Здесь вы видите, что вы просто должны стро своего JSon объекта из String. Затем вы можете извлечь свой документ с помощью специального метода, чтобы получить сильный типизированный объект.

+0

По-прежнему возникают проблемы с этим, 'Image [] [] solid - это мой 2D-массив изображений. Я просто вызываю: 'solids =' then parsing, 'layerse (слой JSONArray) layer представляет собой JSONObject, содержащий один из индексов твердых тел' .get ("data") '.get, чтобы получить 2d-массив через ключевые «данные», найденные внутри объекта слоев по моему запросу JSON – SenjuXo

+0

Можете ли вы предоставить свой текст JSON, пожалуйста? И попробовали ли вы пропустить листинг и вызывать 'solidids = layer.getJSONArray (« data »); – RPresle

Смежные вопросы