VOOZH about

URL: https://www.javacodegeeks.com/converting-json-array-to-java-list-with-gson.html

⇱ Converting JSON Array to Java List with Gson - Java Code Geeks


1. Overview

In the realm of modern software development, the manipulation of data interchange formats like JSON (JavaScript Object Notation) is ubiquitous. Converting JSON Array into Java List objects emerges as a frequent necessity for Java developers striving for efficient data processing. Gson, a cornerstone Java library for JSON parsing, stands ready to streamline this conversion process. In this comprehensive guide, we delve into various strategies for seamlessly transforming a JSON array into an equivalent java.util.List object using Gson.

2. Problem Description

Imagine confronting a JSON array brimming with diverse elements, yearning for conversion into a Java List for subsequent manipulation or processing. Though seemingly straightforward, the task poses challenges owing to the disparate structures of JSON and Java objects. Let’s explore this conversion for the following class.

public class MyObject {
 private String name;

 // Default constructor
 public MyObject() {
 }

 // Constructor with name parameter
 public MyObject(String name) {
 this.name = name;
 }

 // Getter for name
 public String getName() {
 return name;
 }

 // Setter for name
 public void setName(String name) {
 this.name = name;
 }

 // Override toString method for better representation
 @Override
 public String toString() {
 return "MyObject{" +
 "name='" + name + '\'' +
 '}';
 }
}

3. Converting JSON Array to List using getParameterized() in TypeToken From Gson

One effective avenue to navigate this conversion conundrum involves leveraging Gson’s TypeToken class. This approach enables Gson to discern the generic type information during deserialization, facilitating a seamless transition. Using Gson’s TypeToken class with the getParameterized() method. This approach allows Gson to infer the generic type information during deserialization. Let’s illustrate this technique through code:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
...
String json = "[{\"name\":\"John\"},{\"name\":\"Doe\"}]";
TypeToken<List<MyObject>> typeToken = TypeToken.getParameterized(List.class, MyObject.class);
List<MyObject> list = new Gson().fromJson(json, typeToken.getType());

TypeToken.getParameterized() is used to create a TypeToken representing a List of MyObject. Then, the getType() method is called on the TypeToken to retrieve the Type object, which is passed to the fromJson() method for deserialization.

4. Converting JSON Array to List using JsonArray

Alternatively, direct utilization of Gson’s JsonArray class offers a pragmatic solution. This method entails manual traversal of the JSON array, with each element converted into a Java object. Here’s a practical implementation:

String json = "[{\"name\":\"John\"},{\"name\":\"Doe\"}]";
JsonArray jsonArray = JsonParser.parseString(json).getAsJsonArray();
List<MyObject> list = new ArrayList<>();
for (JsonElement element : jsonArray) {
 MyObject obj = new Gson().fromJson(element, MyObject.class);
 list.add(obj);
}

We parse a JSON array into a JsonArray using Gson’s JsonParser. Then, we iterate over each element of the array, converting them into Java objects using Gson’s fromJson() method. Finally, we add each Java object to a List. This approach manually converts each JSON element into a Java object.

5. Converting JSON Array to List using TypeToken From Guava

The versatile Guava library also furnishes a TypeToken class, augmenting Gson conversions with added functionality. While resembling Gson’s TypeToken approach, this method capitalizes on Guava’s utilities for enhanced versatility.

import com.google.common.reflect.TypeToken;
import java.util.List;
...
String json = "[{\"name\":\"John\"},{\"name\":\"Doe\"}]";
Type listType = new TypeToken<List<MyObject>>(){}.getType();
List<MyObject> list = new Gson().fromJson(json, listType);

We utilize Guava’s TypeToken class to create a Type object representing a List of MyObject. Then, we use Gson’s fromJson() method, passing the JSON string and the Type object, to deserialize the JSON array into a Java List. This approach leverages Guava’s utilities for Gson conversions, offering similar functionality to Gson’s TypeToken approach.

6. Converting JSON Array to List using ParameterizedType of Java Reflection API

For the intrepid developer grappling with more intricate scenarios, the Java Reflection API proffers a potent toolset. Dynamically crafting a ParameterizedType encapsulating the List type with the desired element type affords unparalleled flexibility.

To convert a JSON array to a List using ParameterizedType from the Java Reflection API, you need to follow these steps:

  1. Create a ParameterizedType instance representing the List type with the desired element type.
  2. Use Gson’s fromJson() method, passing the JSON array string and the ParameterizedType instance to deserialize the JSON array into a List.

Here’s a code example demonstrating this process:

private class ParameterizedTypeImpl implements ParameterizedType {
 @Override
 public Type[] getActualTypeArguments() {
 return new Type[] { MyObject.class };
 }

 @Override
 public Type getRawType() {
 return List.class;
 }

 @Override
 public Type getOwnerType() {
 return null;
 }
 }
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
...
String json = "[{\"name\":\"John\"},{\"name\":\"Doe\"}]";
ParameterizedType listType = new ParameterizedTypeImpl();
List<MyObject> list = new Gson().fromJson(json, listType);

We import ParameterizedType from java.lang.reflect. We then create a ParameterizedType object representing a List of MyObject using the ParameterizedTypeImpl. Finally, we pass this Type object to the fromJson() method for deserialization.

7. Conclusion

Converting JSON arrays into Java List objects emerges as a commonplace exigency in Java development. Gson’s multifaceted toolkit furnishes an array of methodologies, each tailored to specific use cases. Whether drawn to the simplicity of TypeToken, the flexibility of JsonArray, the synergy with Guava’s TypeToken, or the potency of Java Reflection API’s ParameterizedType, Gson accommodates diverse needs. Armed with an understanding of these techniques, Java developers can adeptly navigate JSON data processing in their applications.

Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

Thank you!

We will contact you soon.

Tags
Gson JSON
👁 Photo of Ashraf Sarhan
Ashraf Sarhan
April 25th, 2024Last Updated: April 25th, 2024
0 4,801 3 minutes read

Ashraf Sarhan

With over 8 years of experience in the field, I have developed and maintained large-scale distributed applications for various domains, including library, audio books, and quant trading. I am passionate about OpenSource, CNCF/DevOps, Microservices, and BigData, and I constantly seek to learn new technologies and tools. I hold two Oracle certifications in Java programming and business component development.
Subscribe

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Back to top button
Close
wpDiscuz