Partner – Orkes – NPI EA (cat=Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag=Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Partner – LambdaTest – NPI EA (cat=Testing)
announcement - icon

Browser testing is essential if you have a website or web applications that users interact with. Manual testing can be very helpful to an extent, but given the multiple browsers available, not to mention versions and operating system, testing everything manually becomes time-consuming and repetitive.

To help automate this process, Selenium is a popular choice for developers, as an open-source tool with a large and active community. What's more, we can further scale our automation testing by running on theLambdaTest cloud-based testing platform.

Read more through our step-by-step tutorial on how to set up Selenium tests with Java and run them on LambdaTest:

>> Automated Browser Testing With Selenium

Partner – Orkes – NPI EA (cat=Java)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

1. Introduction

When working with APIs or configuration files, JSON is often the preferred data exchange format. In Java, the org.json library provides a simple way to parse and handle JSON data. Converting JSON to Java POJOs is important because it enables us to work with typed objects instead of raw text or maps, improving readability, maintainability, and validation.

In this tutorial, we’ll see how to convert a JSONObject into a Java POJO. We use a simple example to understand the process, including converting JSON strings, handling nested objects, and verifying the mapped result.

2. Project Setup

Before starting, let’s include the org.json library in the project to parse and handle JSON data conveniently:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>

This library provides the JSONObject and JSONArray classes that make it easier to create, read, and manipulate JSON in Java.

3. Define the POJO Class

Next, we define a simple User class to represent the structure of the JSON data. This class serves as the target object that the JSON is mapped into:

class User {
    private String name;
    private int age;
    private String email;
    private Address address;

    // Getters and setters
}

class Address {
    private String city;
    private String postalCode;

    // Getters and setters
}

These classes mirror the structure of the JSON data, making it straightforward to convert between JSON and Java objects.

4. Create a Sample JSONObject

Now, we create a sample string and convert it into a JSONObject.

Let’s assume the example JSON string simulates a typical scenario where an application receives JSON data from an API or configuration file:

String jsonString = """
{
  "name": "Alice",
  "age": 25,
  "email": "[email protected]",
  "address": {
    "city": "Singapore",
    "postalCode": "123456"
  }
}
""";

JSONObject jsonObject = new JSONObject(jsonString);

Thus, the JSON includes a nested address object, reflecting a realistic JSON structure.

With the User POJO and a JSONObject prepared, several ways exist to convert this JSON data into a Java object, either manually or through libraries such as Jackson.

5. Using Manual Mapping

Manual mapping involves extracting each value from the JSONObject and setting it in the corresponding fields in the POJO.

To that end, let’s create a method to map the JSONObject to a POJO manually:

public static User mapManually(JSONObject jsonObject) {
    User user = new User();
    user.setName(jsonObject.getString("name"));
    user.setAge(jsonObject.getInt("age"));
    user.setEmail(jsonObject.getString("email"));

    JSONObject addressObject = jsonObject.getJSONObject("address");
    Address address = new Address();
    address.setCity(addressObject.getString("city"));
    address.setPostalCode(addressObject.getString("postalCode"));
    user.setAddress(address);

    return user;
}

This approach is clear and fairly easy to follow. It usually works well when the JSON structure is small and stable. Each field is explicitly mapped, enabling custom handling, such as default values or transformations.

Still, the manual mapping provably contains the correct values, as we can see from the test:

User user = mapManually(jsonObject);

assertEquals("Alice", user.getName());
assertEquals(25, user.getAge());
assertEquals("[email protected]", user.getEmail());
assertEquals("Singapore", user.getAddress().getCity());
assertEquals("123456", user.getAddress().getPostalCode());

However, manual mapping becomes repetitive and error-prone with large or deeply nested JSON structures.

6. Using Jackson

Jackson is a popular library that can automatically map JSON strings to POJOs.

6.1. Basics

To use Jackson, we add the respective pom.xml dependency:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.16.0</version>
</dependency>

After converting the JSONObject into a JSON string, Jackson handles the mapping with a single method call:

public static User mapWithJackson(JSONObject jsonObject) {
    ObjectMapper mapper = new ObjectMapper();
    try {
        return mapper.readValue(jsonObject.toString(), User.class);
    } catch (Exception e) {
        return null;
    }
}

Jackson eliminates most of the boilerplate code required for manual mapping and automatically manages complex JSON structures. It also maps nested objects, such as the address field, when the POJO structure matches the JSON hierarchy.

6.2. Collections

Collections such as lists and arrays are supported without additional setup. For instance, let’s assume the JSON includes an array of phone numbers:

{
  "name": "Alice",
  "age": 25,
  "email": "[email protected]",
  "address": {
    "city": "Singapore",
    "postalCode": "123456"
  },
  "phones": ["12345678", "87654321"]
}

A corresponding List<String> field can be added in the User class:

private List<String> phones;

Jackson maps the phones array into a Java List automatically. This suits APIs where JSON data frequently contains nested objects and arrays.

6.3. Customization

In addition, Jackson also supports customization through annotations. For example, if a JSON field name differs from the Java property, the @JsonProperty annotation can define the mapping:

class User {
    @JsonProperty("full_name")
    private String name;
    private int age;
    private String email;
    // Getters and setters
}

Jackson reads the full_name field from JSON and assigns it to the name property automatically. This flexibility is useful when integrating with APIs that use different naming conventions.

Jackson also supports polymorphic deserialization, enabling it to handle JSON that represents multiple subtypes of a base class. For example, consider a base class Animal and two subclasses, Dog and Cat:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.PROPERTY,
    property = "type"
)
@JsonSubTypes({
    @JsonSubTypes.Type(value = Dog.class, name = "dog"),
    @JsonSubTypes.Type(value = Cat.class, name = "cat")
})
abstract class Animal {
    private String name;
    // Getter and setter
}

class Dog extends Animal {
    private int barkVolume;
    // Getter and setter
}

class Cat extends Animal {
    private boolean likesFish;
    // Getter and setter
}

With this setup, Jackson automatically determines which subclass to instantiate based on the type field in the JSON:

[
  { "type": "dog", "name": "Buddy", "barkVolume": 5 },
  { "type": "cat", "name": "Mimi", "likesFish": true }
]

The JSON can be mapped into the correct subclasses using Jackson’s ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
List<Animal> animals = Arrays.asList(
    mapper.readValue(jsonArrayString, Animal[].class)
);

Jackson creates a Dog object for the first entry and a Cat object for the second without extra logic.

6.4. Verification

We can verify that the Jackson mapping works correctly:

User user = mapWithJackson(jsonObject);

assertEquals("Alice", user.getName());
assertEquals("Singapore", user.getAddress().getCity());
assertEquals("123456", user.getAddress().getPostalCode());
assertEquals(2, user.getPhones().size());
assertEquals("12345678", user.getPhones().get(0));
assertEquals("87654321", user.getPhones().get(1));

The assertions validate the mapping.

7. Using Gson

Gson is another popular library for mapping JSON to Java objects. Before using it, we need to add the Gson dependency in the pom.xml:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

Gson parses the JSON string and fills the fields of the POJO, including nested objects and collections, without extra configuration.

So, we can create a simple method to map the JSONObject to the User class:

public static User mapWithGson(JSONObject jsonObject) {
    Gson gson = new Gson();
    return gson.fromJson(jsonObject.toString(), User.class);
}

We verify that the Gson mapping works correctly using assertions:

User user = mapWithGson(jsonObject);

assertEquals("Alice", user.getName());
assertEquals(25, user.getAge());
assertEquals("Singapore", user.getAddress().getCity());
assertEquals(2, user.getPhones().size());

Gson is lightweight and easy to use for quick conversions or small applications. It’s great when we need simple JSON-to-POJO mapping without extra configuration.

8. Conclusion

In this article, we explored several approaches to convert a JSONObject into a Java POJO using manual mapping, Jackson, and Gson. Manual mapping provides full control and suits simple JSON structures, while Jackson offers a powerful and flexible option with annotation support and polymorphic handling. Gson delivers simplicity for lightweight use cases.

As always, the source code is available over on GitHub.

Baeldung Pro – NPI EA (cat = Baeldung)
announcement - icon

Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:

>> Explore a clean Baeldung

Once the early-adopter seats are all used, the price will go up and stay at $33/year.

Partner – Orkes – NPI EA (cat = Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag = Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

eBook Jackson – NPI EA – 3 (cat = Jackson)
guest
0 Comments
Oldest
Newest
Inline Feedbacks
View all comments