Как получить определенные элементы внутри массива внутри JSONObject

#java #arrays #netbeans #filereader #json-simple

#java #массивы #netbeans #filereader #json-простой

Вопрос:

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

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

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

Подобные вещи наряду с другими, которые не сработали, поэтому удалили код.

Это экспортированный файл JSON, и я пытаюсь получить доступ к массиву игровых записей 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. Откуда вы получаете объект JSON и анализатор JSON ? Я спрашиваю, потому что спецификация Java EE 8 использует другой регистр для имен интерфейсов: javax.json.JsonObject и javax.json.stream.JsonParser .

2. import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser;

Ответ №1:

Учитывая ваши данные 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();