Jackson is a popular Open Source Java library to parse JSON file. We can use Jackson Library to convert Java Objects to Json and Json to Java Object effectively.
To convert Java Objects to Json - writeValue method is used.
To convert Json to Java Objects - readValue method is used.
Installation:
Maven dependency
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.2</version>
</dependency>
Steps : Json to Java Objects
Create a JSON File : ProductInfo.json
{
"productName" : "Echo",
"productDesc" : "Alexa Device",
"productId" : "A2022",
"productAvailability": 1500,
"productPrice": 50,
"subProduct": "Eco2",
"Someother": "some.."
}
Create a POJO class with getter and setters:
package Json;
public class ProductInfo {
private String productName;
private String productDesc;
private String productId;
private int productAvailability;
private int productPrice;
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public int getProductAvailability() {
return productAvailability;
}
public void setProductAvailability(int productAvailability) {
this.productAvailability = productAvailability;
}
public int getProductPrice() {
return productPrice;
}
public void setProductPrice(int productPrice) {
this.productPrice = productPrice;
}
public String getSubProduct() {
return subProduct;
}
public void setSubProduct(String subProduct) {
this.subProduct = subProduct;
}
private String subProduct;
}
To Read Json FIle :
package Json;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
import java.io.File;
import java.io.IOException;
public class ReadJsonFile {
public static void main(String[] args) {
ObjectMapper objMap = new ObjectMapper();
objMap.setVisibility(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
try {
// Json file path to read, ProductInfo.json is the root workspace directory.
ProductInfo pdt = objMap.readValue(new File("ProductInfo.json"), ProductInfo.class);
// Print product information
System.out.println("Product Id = " + pdt.getProductId());
System.out.println("Product Desc= " + pdt.getProductDesc());
System.out.println("Product Name = " + pdt.getProductName());
System.out.println("Product Price = " + pdt.getProductPrice());
System.out.println("Product Availability = " + pdt.getProductAvailability());
System.out.println("Sub Product = " + pdt.getSubProduct());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Steps : Java Objects to Json
package Json;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
import java.io.File;
import java.io.IOException;
public class WriteJsonValue {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
try {
ProductInfo prod = new ProductInfo();
prod.setProductDesc("Alexa device");
prod.setProductId("A2323");
prod.setProductName("Eco2");
prod.setSubProduct("Eco3");
prod.setProductAvailability(34);
prod.setProductPrice(3400);
// Create new Json file with the objects
objectMapper.writeValue(new File("ProdcutUpdate.json"), prod);
// Java objects to Json string
String jsonString = objectMapper.writeValueAsString(prod);
System.out.println(jsonString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
There are few other annotations available in Jackson library ,
@JsonInclude - Include based on the conditions
private String productName;
private String productDesc;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String productId;
private int productAvailability;
private int productPrice;
@JsonIgnore, to ignore few fields
private String productName;
private String productDesc;
@JsonIgnore
private String productId;
private int productAvailability;
private int productPrice;
@JsonView - to limit the views