FastJSON - Convert POJO to/from JSON
Tags: java, fastjson, programming
Published: 2022-07-14 14:35:34

Fastjson is a lightweight Java library created by Alibaba. It can be used to convert POJO (Plain Old Java Object) into their JSON representation & convert a JSON string to an equivalent POJO. Fastjson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.

Let's dive straight into the example to look at how this library provides easy APIs to convert Java objects to / from JSON.

- We will create one simple Maven project with following dependencies for FastJson and Lombok(for getters/setters) in pom.xml file.

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>fast-json-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.7</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>

</project>
```

- Lets write simple POJO Employee Class and a Main class to convert it into JSON.

_**JSON.toJSONString()** method helps to serialize Employee object to JSON string._

**Employee.java**
```
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

@Data
public class Employee {

    @JSONField(name = "EmployeeId")
    private Integer id;

    @JSONField(name = "EmployeeName")
    private String name;

    @JSONField(name = "EmployeeLocation")
    private String location;

    @JSONField(name = "EmployeeSalary")
    private Double salary;

    public Employee(Integer id, String name, String location, Double salary) {
        this.id = id;
        this.name = name;
        this.location = location;
        this.salary = salary;
    }
}

```

**Main.java**

```
import com.alibaba.fastjson2.JSON;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {

        List<Employee> employeeList = new ArrayList<>();

        employeeList.add(new Employee(1, "Stephen Hawking", "UK", 1000.00));
        employeeList.add(new Employee(2, "Albert Einstein", "Germany", 2000.00));

        // Convert Employee object to JSON
        String jsonString = JSON.toJSONString(employeeList);

        System.out.println(jsonString);
    }
}

```

**Output:**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nez48rsour4zvnul2ip3.png)

- The JSON output is customizable with control over ordering of key-value pair. You will just need to pass an argument as `ordinal = <nth order>` to `@JSONField`

```
 @JSONField(name = "EmployeeLocation", ordinal = 4)
    private String location;

 @JSONField(name = "EmployeeSalary", ordinal = 3)
    private Double Salary;
```

if you compare the previous output with this one, the key's positions are ordered as specified.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1esprx1hienl573ty47p.png)
 

- You can choose to ignore some of the fields with `serialize=false` parameter.

```
@JSONField(name = "EmployeeId", serialize = false)
    private Integer id;
```

- You can choose date formatting with `format="MM/dd/YYYY"` parameter.

```
@JSONField(name = "EmployeeDoJ", format = "MM/dd/YYYY", ordinal = 5)
    private Date dateOfJoining;
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zmffoqiksvi3lrbepcq.png)


Now, lets parse JSON to Java object. We will look at converting a JSON String, array and file to an object.

- Converting JSON String to Object can be done using `JSON.parseObject(jsonToConvert, Employee.class);`. One of the things to note here is that, the Keys missing in JSON strings will be defaulted to **"false"**. Additionally, if you choose not to deserialize any specific field, you can specify parameter as "deserialize=false" in the @JSONField annotation.

```
@JSONField(name = "EmployeeId", serialize = false, deserialize = false)
    private Integer id;
```

```
// Convert JSON String to Java Object
String jsonToConvert = "{\"EmployeeName\":\"Stephen Hawking\",\"EmployeeSalary\":1000.0,\"EmployeeLocation\":\"UK\"}";
System.out.println("JSON to Convert ==> " + jsonToConvert + "\n");
Employee employeeObj = JSON.parseObject(jsonToConvert, Employee.class);
System.out.println("Converted to Employee Object ==> " + employeeObj);

```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i4n4kgciwl6lqgw2avqm.png)
 
- JSON array to Java object using `JSON.parseArray(jsonArrayToConvert, Employee.class);`

```
String jsonArrayToConvert = "[{\"EmployeeName\":\"Stephen Hawking\",\"EmployeeSalary\":1000.0,\"EmployeeLocation\":\"UK\"},{\"EmployeeName\":\"Albert Einstein\",\"EmployeeSalary\":2000.0,\"EmployeeLocation\":\"Germany\"}]";
System.out.println("JSON Array to Convert ==> " + jsonArrayToConvert + "\n");
List<Employee> employees = JSON.parseArray(jsonArrayToConvert, Employee.class);
System.out.println("Converted to Employee Objects ==> " + employees);
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xnohlqnw3tx2szjed9ir.png)

- JSON file to Java Object --> FastJson bit lacks in direct JSON file support, it needs some extra code to to read from JSON file.

**_JSON File:_**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fvcpbixpca79o9xoaewx.png)

```
// Convert JSON File to Java Object
try (Stream<String> lines = Files.lines(Paths.get("employees.json"))) {
    String jsonContent = lines.collect(Collectors.joining());
    List<Employee> empList = JSON.parseArray(jsonContent, Employee.class);
    System.out.println("Converted to Java Object ==> " + empList);
} catch (IndexOutOfBoundsException | IOException ex) {
    ex.printStackTrace();
}
``` 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vxh79vnwobyspkkxoru.png)

You can checkout more examples on below GitHub Repository.
https://github.com/eugenp/tutorials/tree/master/json-modules/json-2

Leave your reactions and comments below if you found this information useful! Cheers!!