Как получить определенные элементы внутри массива внутри jsonObject - PullRequest
0 голосов
/ 28 марта 2019

Я экспортирую некоторые данные в java, используя json, затем читаю эти данные и пытаюсь получить элементы из массива внутри объекта json, но у меня возникают проблемы.

Я пробовал много вещей, таких как

jsonObject.get("InGameCord").get("x")
Object Testo = jsonObject.get("InGameCord");
Testo.x

Подобные вещи, а также другие, которые не работали, удалили код.

Это экспортированный файл JSON, и я пытаюсь получить доступ к массиву InGameCord X или Y.

{"BaseID":1,"BaseName":"Bandar-e-Jask Airbase","InGameCord":[{"x":463,"y":451}]}

Вот мой код для чтения файлов

FileReader reader = new FileReader(filename);
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
System.out.println(jsonObject);
System.out.println("BaseName: "+jsonObject.get("BaseName"));
System.out.println("BaseID: "+jsonObject.get("BaseID"));
System.out.println("InGameCord: "+jsonObject.get("InGameCord"));

Все это работает и экспортирует правильную информацию.

Итак, я пытаюсь получить, скажем, значение X InGameCord.

int X = 463;

1 Ответ

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

Учитывая ваши данные JSON {"BaseID":1,"BaseName":"Bandar-e-Jask Airbase","InGameCord":[{"x":463,"y":451}]}:

  • "InGameCord" - это имя массива, который может быть создан как JSONArray.
  • Этот массив содержит только один элемент: {"x":463,"y":451}.
  • Этот элемент массива может быть создан как JSONObject. Он содержит две пары имя / значение:

    • "x" со значением 463.
    • "y" со значением 451.

Таким образом, на основе предоставленного вами кода, для создания экземпляра JSONArray:

JSONArray numbers = (JSONArray) jsonObject.get("InGameCord");

Чтобы извлечь первый (и единственный) элемент массива в JSONObject:

JSONObject jObj = (JSONObject) numbers.get(0);

Чтобы получить значение для "x" в переменную int, приведите Object, возвращаемое get() к Number, а затем получите intValue():

int value = ((Number) jObj.get("x")).intValue();

Вы можете даже сделать все это в одной строке, но это ужасно:

int y = ((Number) ((JSONObject) numbers.get(0)).get("y")).intValue();

...