Вывести конкретные значения из файла JSON (вложенные объекты-массивы) с JAVA

Я хотел бы иметь возможность анализировать и распечатывать некоторую информацию из файла JSON, однако я застреваю всякий раз, когда пытаюсь сделать это с вложенными объектами-массивами.

Я использую библиотеку JsonSimple.

Мой файл JSON:

x

Что я делал до сих пор, так это изменил файл следующим образом:

x

И с помощью итератора удалось распечатать всю информацию:

x

Как только я изменяю файл JSON и добавляю объект Staff, он перестает работать. Я знаю, что делаю что-то не так, но не вижу, что.

Я действительно хотел бы иметь возможность распечатать эту информацию с помощью объекта Staff, включенного в файл JSON, и как только это будет сделано, скажите, что мне нужно распечатать этих 2 менеджеров в порядке возрастания возраста, как я это сделаю?

Все идеи и предложения будут высоко оценены! Благодарю.

Менеджер класса:

x

1 ответ

Решение

Сначала нужно получить объект Staff, из которого нужно получить Manager

List<Manager> managersList = new ArrayList<Manager>();

JSONObject staff = jsonObject.getJSONObject("Staff");
JSONArray managers = staff.getJSONArray("Managers");

for (int index = 0; index < managers.length(); index++) {
    JSONObject resultObject = managers.getJSONObject(index);
    System.out.println(resultObject);

    Manager manager = new Manager();
    manager.setName(resultObject.getString("name");
    manager.setAge(resultObject.getInt("age");
    manager.setPosition(resultObject.getString("position");

    managersList.add(manager);
}

как только вы построите список массивов Manager, вы можете использовать следующее для сортировки списка массивов.

Collections.sort(managersList, new Comparator<Manager>() {
    @Override
    public int compare(Manager object1, Manager object2) {
        return Integer.compare(object1.getAge(), object2.getAge());
    }
});

Обновить:

Вот ваше полное рабочее решение:

Менеджер:

public class Manager {
    private int age;
    private String name;
    private String position;

    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPosition() {
        return this.position;
    }

    public void setPosition(String position) {
        this.position = position;
    }
}

Основной метод:

public static void main(String[] args) {
    JSONObject jsonObject = new JSONObject("{\"Staff\": {\"Managers\": [{\"name\": \"Chris\",\"age\": 43,\"position\": \"Retail\"},{\"name\": \"John\",\"age\": 36,\"position\": \"Sales\"}]}}");

    List<Manager> managersList = new ArrayList<Manager>();

    JSONObject staff = jsonObject.getJSONObject("Staff");
    JSONArray managers = staff.getJSONArray("Managers");

    for (int index = 0; index < managers.length(); index++) {
        JSONObject resultObject = managers.getJSONObject(index);

        Manager manager = new Manager();
        manager.setName(resultObject.getString("name"));
        manager.setAge(resultObject.getInt("age"));
        manager.setPosition(resultObject.getString("position"));

        managersList.add(manager);
    }

    Collections.sort(managersList, new Comparator<Manager>() {
        @Override
        public int compare(Manager object1, Manager object2) {
            return Integer.compare(object1.getAge(), object2.getAge());
        }
    });

    for (Manager iterator : managersList) {
        System.out.println(iterator.getName() + " --- " + iterator.getAge() + " --- " + iterator.getPosition());
    }
}

выход:

John --- 36 --- Sales
Chris --- 43 --- Retail
Другие вопросы по тегам