Convierta JSON Array en Java Array o List con Jackson

En este tutorial, usaremos Jackson con Java para convertir una matriz JSON en una matriz Java y una Lista Java con ejemplos. Esto se puede hacer desde Cadenas o Archivos.

Introducción

En este artículo, convertiremos una matriz JSON en una matriz Java y una lista Java usando Jackson.

Ya que estamos usando Jackson, tendrás que agregarlo a tu proyecto. Si está utilizando Maven, es tan fácil como agregar la dependencia:

1
2
3
4
5
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
</dependency>

O, si estás usando Gradle:

1
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.2'

Ya que estamos mapeando desde JSON a nuestros propios objetos, avancemos y definamos un POJO:

1
2
3
4
5
6
public class Language {

    private String name;
    private String description;

    // Getters, setters and toString() method

Leer JSON desde una cadena

Comencemos leyendo JSON de una cadena. El String contiene una variedad de lenguajes de programación, con breves descripciones:

1
String json = "[{\"name\": \"Java\", \"description\": \"Java is a class-based, object-oriented programming language.\"},{\"name\": \"Python\", \"description\": \"Python is an interpreted, high-level and general-purpose programming language.\"}, {\"name\": \"JS\", \"description\": \"JS is a programming language that conforms to the ECMAScript specification.\"}]";

Al usar la clase ObjectMapper de Jackson, es fácil leer valores y asignarlos a un objeto o una matriz de objetos. Simplemente usamos el método readValue(), pasando los contenidos JSON y la clase a la que nos gustaría mapear. Dado que estamos asignando una matriz de Idioma, también especificaremos esto en el método readValue():

1
2
3
// It's advised to use ObjectMapper as a singleton and reuse the instance
final ObjectMapper objectMapper = new ObjectMapper();
Language[] langs = objectMapper.readValue(json, Language[].class);

Alternativamente, puede extraer los valores directamente a una lista, usando la TypeReference de Jackson:

1
List<Language> langList = objectMapper.readValue(json, new TypeReference<List<Language>>(){});

Sin usar TypeReference<>, que es recomendable, puedes convertir la matriz en una lista con cualquier otra enfoque a su disposición, tales como:

1
List<Language> langList = new ArrayList(Arrays.asList(langs));

Y luego imprime los valores:

1
langList.forEach(x -> System.out.println(x.toString()));

Esto resulta en:

1
2
3
Language{name='Java', description='Java is a class-based, object-oriented programming language.'}
Language{name='Python', description='Python is an interpreted, high-level and general-purpose programming language.'}
Language{name='JS', description='JS is a programming language that conforms to the ECMAScript specification.'}

Leer JSON desde un archivo

No siempre tratamos con JSON en formato String. A menudo, los contenidos provienen de un Archivo. Afortunadamente, Jackson hace que esta tarea sea tan fácil como la anterior, solo proporcionamos el Archivo al método readValue():

1
2
3
4
5
6
final ObjectMapper objectMapper = new ObjectMapper();
List<Language> langList = objectMapper.readValue(
        new File("langs.json"), 
        new TypeReference<List<Language>>(){});

langList.forEach(x -> System.out.println(x.toString()));

El archivo langs.json contiene:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[
  {
    "name": "Java",
    "description": "Java is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible."
  },
  {
    "name": "Python",
    "description": "Python is an interpreted, high-level and general-purpose programming language. Created by Guido van Rossum and first released in 1991."
  },
  {
    "name": "JS",
    "description": "JS is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm."
  }
]

Ejecutar este código da como resultado:

1
2
3
Language{name='Java', description='Java is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible.'}
Language{name='Python', description='Python is an interpreted, high-level and general-purpose programming language. Created by Guido van Rossum and first released in 1991.'}
Language{name='JS', description='JS is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm.'}

Conclusión

En este artículo, hemos utilizado Jackson para analizar y asignar los valores de una cadena JSON y un archivo a una matriz y lista Java.

Esto se hace a través del método readValue(), especificando los contenidos JSON (Cadena o archivo) y especificando el POJO al que nos gustaría mapear.