cómo convertir JSON en POJO, donde no se da param name

Kapil Sharma:

Estoy tratando de convertir JSON para Java usando Jackson. Pero no obtener una solución adecuada. Tengo JSON que no tiene nombre de parámetro en el mismo. Quiero usar PropertyOrder para mapear los campos JSON a POJO.

Probé el tipo de referencia de todas las maneras posibles, pero no pudo conseguir el resultado deseado.

Mi JSON es como: { "1222": [ "Joe", 26, 158], "1232": [ "raíz", 29, 168]}

A continuación se presentan el POJO:

public class Employee{
    int empId;
    EmployeeAtttribute employeeAttribute;
}

@JsonProertyOrder({"name", "seq", "height"})  
public class EmployeeAttribute{     
    String name;  
    int seq;  
    int height;  
}  

Estoy buscando para obtener la lista de clase Employee hace usando JSON.

Gracias por adelantado.

TechFree:

Anotar la clase EmployeeAttribute como:

@JsonFormat(shape = JsonFormat.Shape.ARRAY)
@JsonPropertyOrder({"name", "seq", "height"})
public class EmployeeAttribute
{

    public String name;

    public int seq;

    public int height;

    @Override
    public String toString()
    {
        return "EmployeeAttribute [name=" + name + ", seq=" + seq + ", height=" + height + "]";
    }
}

Puede utilizar este código para convertir su JSON a objetos (mapa):

ObjectMapper mapper = new ObjectMapper();
String jsonInput = "{\"1222\": [\"Joe\", 26, 158],\"1232\": [\"root\", 29, 168] }";
TypeReference<Map<String, EmployeeAttribute>> typeRef =
    new TypeReference<Map<String, EmployeeAttribute>>()
    {
    };

Map<String, EmployeeAttribute> map = mapper.readValue(jsonInput, typeRef);
map.values().iterator().forEachRemaining(System.out::println);

Además convertir esto en una lista de los empleados:

 List<Employee> employee = new ArrayList<>();
 for (Map.Entry<String, EmployeeAttribute> entry : map.entrySet()) {
       employee.add(new Employee(Integer.valueOf(entry.getKey()), 
  entry.getValue()));
 }

Para el requisito extendida en la cadena JSON de entrada contenía clave 'emp_count', ya que la entrada no es realmente analizable a un modelo de objetos de Java, este enfoque puede ser utilizado, que lee este elemento, y lo elimina, de manera que el análisis según la lógica original trabajo sería como antes y el 'emp_count' todavía se leen / extraído. Optimizar según sea necesario:

String jsonInput = "{\"1222\": [\"Joe\", 26, 158],\"1232\": [\"root\", 29, 168], \"emp_count\" : \"2\"}";
JsonNode node = mapper.readTree(jsonInput);
if (node.has("emp_count")) {
   int employeesInArray = ((ObjectNode) node).remove("emp_count").asInt();
   System.out.println("Num of employees in array: " + employeesInArray);
} else {
   System.out.println("Num of employees was not provided, missing emp_count element");
}

//updated JSON input String, that works as before
jsonInput = node.toString();

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=237225&siteId=1
Recomendado
Clasificación