JSON deserializa ArrayList correctamente

Primer problema: está deserializando a ArrayList sin ningún tipo genérico, por eso está recibiendo ArrayList de LinkedHashMap. Jackson no sabe que desea una lista de personas, por lo que utiliza LinkedHashMap como tipo aplicable a cualquier json.

Para deserializar la lista de personas que debe usar:

ArrayList<Person> list = mapper.readValue(new FileInputStream("./person.json"),
                    mapper.getTypeFactory().constructCollectionType(ArrayList.class, Person.class));

Segundo problema: que está trabajando con Java 8 time (clase LocalDate), pero Jackson no lo sabe. Para poder manejarlo correctamente, debe agregarlo JavaTimeModuledesde la jackson-datatype-jsr310dependencia y registrarlo.

Entonces el código resultante será así:

public void write() {
    ArrayList<Person> personList = new ArrayList<>();

    Person p1 = new Person("James", "Bond", LocalDate.of(1997, 9, 22));
    Person p2 = new Person("Santa", "Claus", LocalDate.of(1918, 11, 6));
    Person p3 = new Person("Peter", "Griffin", LocalDate.of(1978, 3, 24));
    Person p4 = new Person("Lois", "Griffin", LocalDate.of(1982, 7, 14));

    personList.add(p1);
    personList.add(p2);
    personList.add(p3);
    personList.add(p4);

    ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());
    ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());

    try {
        writer.writeValue(new File("./person.json"), personList);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void read() {
    ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());

    try {
        ArrayList<Person> list = mapper.readValue(new FileInputStream("./person.json"),
                mapper.getTypeFactory().constructCollectionType(ArrayList.class, Person.class));
        System.out.println("Read: " + list.get(0).getFirstname());
    } catch (IOException e) {
        e.printStackTrace();
    }

}
Respuesta 1

Estoy investigando y estoy jugando con Apache Mahout 0.6. Mi propósito es construir un sistema que nombre diferentes categorías de documentos en base a las aportaciones del usuario. Los documentos no se conocen en ...

Tengo un archivo jar con un punto de entrada predefinido en su archivo de manifiesto. Y se puede ejecutar con éxito. hadoop jar hadoop-test-1.0.2.jar -write -nrFiles 1 -fileSize 10 TestDFSIO.0.0.4 12/06/11 21: ...

Tenemos una aplicación web Spring MVC (WAR) que se implementa en Tomcat (6.0.35) que lanza un hilo dentro de una JVM separada en el momento de la implementación (no pregunte por qué, no mi diseño) y luego se comunica con ese hilo a través de ...

Tengo un proyecto Vaadin 8.6.1 que funcionó sin problemas hasta ahora, cuando de repente no se compila: no se cambia nada en el código o en el pom. El comando que estoy ejecutando es paquete limpio -e, pero ...