Java Serialize Json in Order


Maybe some time for any special use case we need to keep JSON object properties in some specific order. This can be done in two ways in Java.

1- Just write a method to return JSON string in that order or you can override toString() the the the the method with JSON string in order properties.

2- Use Jackson library and @JsonPropetyOrder class attribute.

3- Using LinkedHashMap will serialize in inserted order and TreeMap will serialize in sorted key order

Example of Jackson Property order

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.istack.NotNull;
import java.io.IOException;
import java.util.UUID;

@JsonPropertyOrder({ "id", "password", "name", "email", "enabled" })
public class UserResource {
    private UUID id;
    @NotNull
    private String name;
    @NotNull
    private String email;
    private boolean enabled;
    private String password;

    public UserResource(UUID id, String name, String email, boolean enabled, String password) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.enabled = enabled;
        this.password = password;
    }

    public UUID getId() {
        return id;
    }

    public void setId(UUID id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public static void main(String args[]){
        ObjectMapper mapper = new ObjectMapper();
        try {
            UserResource student = new UserResource(UUID.randomUUID(), "sheel", "sheel@c4c.com",true, "$$$$$$%%##^^$DSGHHH");
            String jsonString = mapper
                    .writerWithDefaultPrettyPrinter()
                    .writeValueAsString(student);
            System.out.println(jsonString);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Output is given below

{
  "id" : "fbfcd21d-731e-4acb-9fec-90a499e47cc9",
  "password" : "$$$$$$%%##^^$DSGHHH",
  "name" : "sheel",
  "email" : "sheel@c4c.com",
  "enabled" : true
}

Example of Ordered Serialization in JSON using LinkedHashMap and TreeMap

public static void main(String args[]){
        ObjectMapper mapper = new ObjectMapper();
        Map<String, String> itemObj = new LinkedHashMap<>();
        itemObj.put("s91","Value1");
        itemObj.put("s2","Value2");
        itemObj.put("s3","Value3");
        itemObj.put("s4","Value4");
        try {

            String jsonString = mapper
                    .writerWithDefaultPrettyPrinter()
                    .writeValueAsString(itemObj);
            System.out.println(jsonString);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

Output

{
  "s91" : "Value1",
  "s2" : "Value2",
  "s3" : "Value3",
  "s4" : "Value4"
}

Using TreeSet

public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
Map itemObj = new LinkedHashMap<>();
itemObj.put(“s91″,”Value1”);
itemObj.put(“s2″,”Value2”);
itemObj.put(“s3″,”Value3”);
itemObj.put(“s4″,”Value4”);
try {

public static void main(String args[]){
        ObjectMapper mapper = new ObjectMapper();
        Map<String, String> itemObj = new TreeMap<>();
        itemObj.put("s91","Value1");
        itemObj.put("s2","Value2");
        itemObj.put("s3","Value3");
        itemObj.put("s4","Value4");
        try {

            String jsonString = mapper
                    .writerWithDefaultPrettyPrinter()
                    .writeValueAsString(itemObj);
            System.out.println(jsonString);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

Output

{
  "s2" : "Value2",
  "s3" : "Value3",
  "s4" : "Value4",
  "s91" : "Value1"
}

Leave a Reply

Your email address will not be published. Required fields are marked *

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