Soy nuevo en la programación Java y estoy trabajando en una aplicación Spring Boot con un servicio REST que llamará a otro servicio y devolverá una respuesta JSON. Estoy usando OkHttpClient para manejar esta llamada.

Sin embargo, a partir de la respuesta JSON, solo necesito algunos atributos como salida final en formato Lista.

¿Cómo puedo extraer solo los atributos requeridos de mi respuesta okHttpCliwnt?

Mi respuesta del servicio de terceros se ve a continuación:

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

A partir de esta respuesta, mi respuesta final solo debe ser la siguiente:

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

Por favor ayúdame.

0
Shrut Biswas 23 feb. 2018 a las 05:12

3 respuestas

La mejor respuesta

Busqué pero para tal anidamiento no pude encontrar nada concreto. Sin embargo, intenté con JsonNode y llegué a esto.

    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);

Clase de empleado

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;
    }
}

EmployeeDetl

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 + "]";
    }

}
0
Sagar Kharab 23 feb. 2018 a las 03:53

Jackson podría ser la herramienta que estás buscando. Solo necesita crear una clase, digamos 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;
    }
}

Y 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;
    }
}

Más anotaciones, por favor consulte

0
Bejond 23 feb. 2018 a las 04:04

Debe realizar el análisis manualmente utilizando org.json o algún otro marco json.

-1
AtherSajjad 23 feb. 2018 a las 02:20