Converting Kotlin Data Class from JSON using GSON

Learn via video courses
Topics Covered

Overview

Converting json to kotlin data class using GSON is a common and efficient process in modern software development. GSON, a popular Java library developed by Google, provides a straightforward way to serialize and deserialize Java and Kotlin objects to and from JSON representations. When working with Kotlin data classes, which are used to define simple data structures with automatically generated components like getters, setters, and equals methods, GSON streamlines the conversion process. By annotating data class properties with GSON's annotations, such as @SerializedName to map JSON keys to Kotlin property names, developers can ensure seamless mapping between JSON and Kotlin objects.

Add Gson to your Kotlin project

To add GSON to your Kotlin project to convert json to kotlin data class, follow these steps:

  1. Add Dependencies: Open your project's build.gradle (Module: app) file and add the GSON dependency to the dependencies section:
    Make sure to replace 2.8.8 with the latest version of GSON available at the time you're adding it.
  2. Sync Gradle: After adding the dependency, sync your project with Gradle to download the GSON library.
  3. Create Kotlin Data Class: Define the Kotlin data class that represents the structure of your JSON data. Annotate class properties with @SerializedName if the JSON keys are different from the property names.
  4. Using GSON for Serialization and Deserialization: You can now use GSON to convert between JSON and Kotlin objects. Here's an example of how to do this:
    Output:
    Serialized JSON: {"first_name":"John","last_name":"Doe","age":30}
    Deserialized Person: Person(firstName=Jane, lastName=Smith, age=25)
    
    Explanation: In this example, the toJson method serializes the person object into a JSON string, and the fromJson method deserializes the JSON string back into a Kotlin object.

Create a Kotlin Data Class

In Kotlin, a data class is a specialized class that is designed primarily to hold data, rather than providing behavior. It is often used to represent simple data structures in your code. The main purpose of data classes is to reduce boilerplate code and provide automatically generated implementations for common functions that are often required when working with data objects.

Here's an example of creation of data class in Kotlin and convert json to kotlin data class using GSON:

Gson.fromJson() method

The fromJson method is a crucial part of the GSON library that enables you to deserialize JSON data into Java or Kotlin objects, that is it converts json to kotlin data class. It's used to convert a JSON string representation into an instance of a specified Java/Kotlin class. In Kotlin, you typically use data classes to represent the structure of the object you want to deserialize the JSON into. The fromJson method is provided by the com.google.gson.Gson class.

Syntax:

Here's the basic syntax of the fromJson method:

In this syntax:

  • gson: An instance of the Gson class, which is used for JSON serialization and deserialization, that is it converts json to kotlin data class.
  • jsonString: The JSON string that you want to deserialize.
  • YourDataClass::class.java: A reference to the Kotlin data class (or Java class) that you want to deserialize the JSON into.

Example:

Code:

Output:

Explanation:

  • It defines a JSON input string jsonInput representing a book with the title The Hobbit, author J.R.R. Tolkien and a publication year of 1937.
  • It uses gson.fromJson to deserialize the JSON input into a Book object named book.

Gson.toJson() method

The toJson method is a fundamental part of the GSON library that enables you to serialize Java or Kotlin objects into JSON format. It's used to convert an object instance into its JSON representation. In Kotlin, you often use data classes to represent the structure of the object you want to serialize to JSON. The toJson method is provided by the com.google.gson.Gson class.

Here's the basic syntax of the toJson method:

In this syntax:

  • gson: An instance of the Gson class, which is used for JSON serialization and deserialization.
  • yourObject: The instance of the Kotlin data class (or Java class) that you want to serialize to JSON.

Here's an example using a simplified Book data class:

Code:

Output:

Explanation:

  • It creates a Book object named book with the title The Hobbit author J.R.R. Tolkien and a publication year of 1937.
  • It uses gson.toJson to serialize the book object into a JSON string and stores it in the jsonString variable.

Kotlin parse JSON to Data Class Object

To parse JSON into a Kotlin data class object using the GSON library, you'll use the fromJson method provided by GSON. Here's a step-by-step guide on how to do this:

  1. Define your Kotlin Data Class: Create a Kotlin data class that matches the structure of the JSON you want to parse. Annotate properties if the JSON keys differ from the property names.

  2. Import GSON: Make sure you have the GSON library imported in your Kotlin file.

  3. Parse JSON to Data Class Object: Assuming you have a JSON string that you want to parse:

    You can use the following code to parse this JSON into a Person object: Code:

    Output:

    Explanation: In this example, fromJson is used to parse the jsonInput string into a Person object. The type parameter Person::class.java tells GSON which class to use for deserialization.

Kotlin parse JSON to Array or List

Parsing JSON into an array or list of Kotlin data class objects using GSON involves a similar process to parsing a single object. Here's how you can do it:

  1. Define your Kotlin Data Class: Create a Kotlin data class that matches the structure of the JSON objects you want to parse within the array or list.
  2. Import GSON: Make sure you have the GSON library imported in your Kotlin file.
  3. Parse JSON Array to List of Data Class Objects: Assuming you have a JSON array that contains multiple Person objects:
    You can use the following code to parse this JSON array into a list of Person objects: Code:
    Output:
    Explanation: In this example, fromJson is used to parse the JSON array into an array of Person objects. The .toList() extension function is then used to convert the array to a list. The type parameter Array<Person>::class.java specifies the type of the array elements.

By looping through the personList, you can access and print the properties of each Person object.

This process allows you to easily convert a JSON array into a list or array of Kotlin data class objects, enabling you to work with collections of objects in your application.

Kotlin parse JSON to Map

To parse JSON into a Kotlin Map using the GSON library, you can follow these steps:

Assuming you have a JSON object:

You can parse this JSON object into a Map using the following code:

Code:

Output:

Explanation:

In this example, the key step is using the TypeToken class from GSON to specify the type of the target map. GSON requires this approach because it needs to handle the generic nature of Map (with arbitrary keys and values).

This code will parse the JSON object into a Map<String, Any> where keys are strings and values are of type Any (which is a flexible type that can hold different data types).

Convert Object to JSON string in Kotlin

Here's how you can convert various types of objects to JSON strings using the GSON library in Kotlin:

Convert Data Class Object to JSON String:

Assuming you have a data class named Person:

You can convert a Person object to a JSON string:

Output:

Explanation:

  • The toJson method is called on the Gson instance, which converts the person object into a JSON string.
  • The resulting JSON string is printed.

Convert List to JSON String:

Suppose you have a list of strings:

You can convert this list to a JSON string:

Output:

Explanation:

  • The toJson method is called on the Gson instance with myList as an argument, which converts the list to a JSON array string.
  • The resulting JSON array string is printed.

Convert Array to JSON String:

Assume you have an array of strings:

You can convert this array to a JSON string similarly:

Output:

Explanation:

  • The toJson method is called on the Gson instance with myArray as an argument, which converts the array to a JSON array string.
  • The resulting JSON array string is printed.

Convert Map to JSON String:

Suppose you have a map of key-value pairs:

You can convert this map to a JSON string:

Output:

Explanation:

  • The toJson method is called on the Gson instance with myMap as an argument, which converts the map to a JSON object string.
  • The resulting JSON object string is printed.

Conclusion

  • GSON for JSON Conversion: GSON is a library that facilitates the conversion of Kotlin data classes to and from JSON format.
  • Data Class Definition: Kotlin data classes define the structure of objects, making them suitable for JSON conversion.
  • Serialization (Object to JSON): Using GSON's toJson() method, Kotlin data class objects can be transformed into JSON strings.
  • Deserialization (JSON to Object): GSON's fromJson() method allows JSON strings to be converted back into Kotlin data class objects.
  • Handling Collections: GSON also handles converting lists, arrays, and maps to JSON strings.
  • Annotations: The @SerializedName annotation helps map JSON keys to data class properties.
  • Benefits of GSON: GSON simplifies the integration of JSON data with Kotlin data classes, aiding in efficient communication between different parts of an application.