java - 使用 JAVA 从 JSON 文件(嵌套对象数组)打印特定值

标签 java arrays json json-simple

我希望能够解析并打印出 JSON 文件中的一些信息,但是每当我尝试使用嵌套对象数组执行此操作时,我都会遇到困难。

我正在使用 JsonSimple 库。

我的 json 文件:

x

到目前为止我所做的是将文件修改为以下内容:

x

并且通过使用迭代器能够打印出所有信息:

x

一旦我修改 JSON 文件并添加 Staff 对象,它就会停止工作。 我知道我做错了什么,但我看不出是什么。

我真的希望能够使用 JSON 文件中包含的 Staff 对象打印出此信息,一旦完成,我需要按年龄升序打印这 2 位经理,我将如何做到这一点?

所有的想法和建议将不胜感激!谢谢。

经理类:

x

最佳答案

首先您需要获取 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

关于java - 使用 JAVA 从 JSON 文件(嵌套对象数组)打印特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29050068/

相关文章:

java - 格式化 JTextArea 的结果,使其不跳过行?

java - 我们可以替换 System.out.println() 中的 "out"吗?

c# - 使用 LINQ 排序后获取集合中项目的新索引

Javascript对象数组分组和求和

javascript - Ajax Post请求示例

java - 将 JavaBeans 源解析为 json 描述符

java - UndoableEditListener - 添加到 JLabel 和 JTextPane

c - 使用 C 返回数组

javascript - 如何使用 phonegap 运行外部 php 脚本?

java - k-means 在 mapreduce 中对特定集群中的文件进行分组