【问题标题】:Convert a received JSON response to List<T> in Java将收到的 JSON 响应转换为 Java 中的 List<T>
【发布时间】:2018-08-03 01:16:50
【问题描述】:

我是 Java 编程新手,我正在开发一个带有 REST 服务的 Spring Boot 应用程序,该服务将调用另一个服务并返回 JSON 响应。 我正在使用 OkHttpClient 来处理这个调用。

但是从 JSON 响应来看,我只需要很少的属性作为 List 格式的最终​​输出。

如何从我的 okHttpCliwnt 响应中仅提取所需的属性?

我的第三方服务回复如下:

{
    "employeeDetail": [{
            "employee": {
                "name": "abc",
                "age": "30",
                "details": {
                    "role": "developer",
                    "phone": "123"
                }
            }
        },
        {
            "employee": {
                "name": "abc",
                "age": "30",
                "details": {
                    "role": "sr.developer",
                    "phone": "1234"
                }
            }
        }
    ]
}

从这个回复中,我的最终回复只需要如下所示:

{
    "employeeDetail": [{
            "name": "abc",
            "age": "30",
            "role": "developer"
        },
        {
            "name": "abc",
            "age": "30",
            "role": "sr.developer"
        }
    ]
}

请帮助我。

【问题讨论】:

标签: java json


【解决方案1】:

我搜索过,但是对于这样的嵌套,我找不到任何具体的东西。但是我尝试使用 JsonNode 并得到了这个。

    ObjectMapper mapper = new ObjectMapper();
    JsonNode rootNode = mapper.readTree(str);
    JsonNode empDetNode = rootNode.path("employeeDetail");
    Iterator<JsonNode> elements = empDetNode.elements();
    List<Employee> empList = new ArrayList<Employee>();
    Gson gson = new Gson();
    while (elements.hasNext()) {
        Employee emp1 = new Employee(); 
        JsonNode emp= elements.next();
        JsonNode empl= emp.path("employee");
        JsonNode name= empl.path("name");
        JsonNode age= empl.path("age");
        JsonNode details= empl.path("details");
        JsonNode role= details.path("details");
        emp1.setAge(age.toString());
        emp1.setName(name.toString());
        emp1.setRole(role.toString());
        empList.add(emp1);
    }
    EmpDetl empdetl = new EmpDetl();
    empdetl.setEmployeeDetl(empList);

员工类

public class Employee {
    private String name;
    private String age;
    private String role;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }
}

员工详细信息

import java.util.List;

public class EmpDetl {

    private List<Employee> employeeDetl;
    public List<Employee> getEmployeeDetl() {
        return employeeDetl;
    }
    public void setEmployeeDetl(List<Employee> empLists) {
        this.employeeDetl = empLists;
    }
    @Override
    public String toString() {
        return "EmpDetl [empLists=" + employeeDetl + "]";
    }

}

【讨论】:

  • 非常感谢@sagar。这解决了我的问题。它按预期的结果完美运行。
  • @Shruti :没问题。我也遇到过这样的问题。我很高兴它可以帮助你。
  • @shruti :很抱歉自私,但如果它解决了您的问题,请升级它。我需要达到 50 才能对问题发表评论
  • 抱歉,我确实尝试过投票,但由于我的声望不超过 15 个,因此我的投票不会在屏幕上显示。
【解决方案2】:

我不知道如何将 JSON 转换为 List,但您可以使用 Gson 将 JSON 转换为 Java 对象。

之后,您可以将对象的内容或对象本身添加到列表中。

这是来自https://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/的sn-p

Gson gson = new Gson();

// 1. JSON to Java object, read it from a file.
Staff staff = gson.fromJson(new FileReader("D:\\file.json"), Staff.class);

// 2. JSON to Java object, read it from a Json String.
String jsonInString = "{'name' : 'mkyong'}";
Staff staff = gson.fromJson(jsonInString, Staff.class);

// JSON to JsonElement, convert to String later.
JsonElement json = gson.fromJson(new FileReader("D:\\file.json"), 
JsonElement.class);
String result = gson.toJson(json);

【讨论】:

    【解决方案3】:

    Jackson 可能是您正在寻找的工具。你只需要创建一个类,比如Employee.java:

    public class Employee {
        @JsonProperty("name")
        private String name;
    
        @JsonProperty("age")
        private String age;
    
        @JsonProperty("role")
        private String role;
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getRole() {
            return role;
        }
        public void setRole(String role) {
            this.role = role;
        }
    }
    

    和EmployeeDetail.java

    import java.util.List;
    
    @JsonRootName(value = "employeeDetail")
    public class EmployeeDetail {
    
        private List<Employee> employees;
        public List<Employee> getEmployees() {
            return employees;
        }
        public void setEmployees(List<Employee> employees) {
            this.employees = employees;
        }
    }
    

    更多注释请refer

    【讨论】:

    • 非常感谢。我会检查一下,看看我是否能够得到我的结果。
    【解决方案4】:

    您必须使用 org.json 或其他一些 json 框架手动进行解析。

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多