Загрузить данные из файла JSON, сгенерированного Tiled, используя org.json.simple - PullRequest
0 голосов
/ 18 марта 2019

Новичок здесь ... Мне нужно обратиться к следующим двум массивам "data" в этом файле JSON по отдельности, чтобы я мог сохранить их в разных массивах int:

{ 
//other stuff ...
"layers":[
{"data":[1, 1, 1, 1, 5, 1, 1, 1...],
//other stuff ...
}, 
{"data":[1, 1, 1, 1, 5, 1, 1, 1...],
//other stuff...
}
],
//other stuff...
}

вот код, который у меня есть до сих пор:

@SuppressWarnings("unchecked")
    private void loadJsonData() {
        JSONParser parser = new JSONParser();
        try {
            Object obj = parser.parse(new FileReader(path));
            String jsonStr = obj.toString();
            JSONObject json = (JSONObject) JSONValue.parse(jsonStr);

          //other code...

          mapTiles = ...;
          objectTiles = ...;

        } catch (ParseException ex) {
            ex.printStackTrace();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (ClassCastException ex) {
            ex.printStackTrace();
        }
    }

Я уверен, что ответ где-то есть, но я слишком некомпетентен, чтобы его найти: D

1 Ответ

0 голосов
/ 18 марта 2019

Существует множество ресурсов, а библиотека json org проста в использовании.

Вы можете найти больше ПРИМЕРОВ здесь

    JSONParser parser = new JSONParser();
    Object parsedObject = parser.parse(jsonStr);

    JSONObject jsonObject = (JSONObject) parsedObject;
    JSONArray layers = (JSONArray) jsonObject.get("layers"); 

    JSONObject data = (JSONObject) layers.get(0);   
    JSONArray mapData = (JSONArray) data.get("data");   
    int[] mapTile = new int[mapData.size()];
    for (int i = 0; i < mapData.size(); i++) {
        mapTile[i] = ((Long)mapData.get(i)).intValue();
    }

    data = (JSONObject) layers.get(1);  
    JSONArray objectData = (JSONArray) data.get("data");    
    int[] objectTile = new int[objectData.size()];
    for (int i = 0; i < objectData.size(); i++) {
        objectTile[i] = ((Long)objectData.get(i)).intValue();
    }

    System.out.println(Arrays.toString(mapTile));
    System.out.println(Arrays.toString(objectTile));
...