Similar to Jackson API, Google GSON API provides a conceptual tree notion for JSON. Google Gson Tree model API provides com.google.gson.JsonParser which can be used to parse the input JSON string into a tree of com.google.gson.JsonElement. On reading side, JsonElement provides isJsonXXX methods to check the type of Json element and getAsYYY() methods to get the actual data on that tree node.
On the writing end, core com.google.gson.Gson api provides toJsonTree method which converts a java object into a conceptual tree node JsonElement. JsonElement can then return JsonObject which provides addProperty methods to add individual fields/property on that JsonObject and create/construct the complete tree whose elements can be updated at run time.
- Spring MVC 4+Spring Security 4 + Hibernate Integration Example
- Spring MVC 4+AngularJS Routing with UI-Router Example
- Spring MVC 4+AngularJS Example
- Spring MVC 4 HelloWorld – Annotation/JavaConfig Example
- Spring MVC 4+Hibernate 4+MySQL+Maven integration example
- Spring 4 Hello World Example
- Spring Security 4 Hello World Annotation+XML Example
- Hibernate MySQL Maven Hello World Example (Annotation)
- TestNG Hello World Example
- JAXB2 Helloworld Example
- Spring Batch- Read a CSV file and write to an XML file
Complete Example
Step 1: Include Google GSON dependency in pom.xml
<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.websystique.json</groupId> <artifactId>GsonTreeModelExample</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>GsonTreeModelExample</name> <dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency> </dependencies> </project>
Step 2: Read Input JSON string into Tree model
Sample input file input.json used in below Main
{"name":"AUDI","model":2014,"price":30000,"colors":["GRAY","BLACK","WHITE"]}
package com.websystique.json.gson;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class JsonGsonTreeModelReadExample {
public static void main(String[] args) throws FileNotFoundException {
FileReader reader = new FileReader(new File("input.json"));
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(reader);// Returns Root element(
// which is a JsonElement,
// can be object,array, null
// or primitive)
if (element.isJsonObject()) {
JsonObject car = element.getAsJsonObject();
System.out.println(car.get("name").getAsString());//read as string
System.out.println(car.get("model").getAsInt()); //read as integer
System.out.println(car.get("price").getAsDouble());//read as double
JsonArray arr = car.getAsJsonArray("colors");//read as array
for (int i = 0; i < arr.size(); i++) {
System.out.println(arr.get(i).getAsString());
}
}
}
}
Run it. Following output is generated:
AUDI 2014 30000.0 GRAY BLACK WHITE
Step 2: Write Tree model into Json String
package com.websystique.json.gson;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
public class JsonGsonTreeModelWriteExample {
public static void main(String args[]) {
JsonGsonTreeModelWriteExample ex = new JsonGsonTreeModelWriteExample();
Car car = ex.getCar();
Gson gson = new GsonBuilder().create();
JsonElement jsonElement = gson.toJsonTree(car);
System.out.println("Original JSON : " + jsonElement); // Root element
JsonObject jsonObject = jsonElement.getAsJsonObject();
jsonObject.addProperty("power", "300BHP"); // add a new property
jsonObject.remove("cost"); // remove an existing property
jsonObject.getAsJsonArray("colors").set(0, new JsonPrimitive("RED"));// update an existing property
System.out.println("Updated JSON : " + jsonObject);
}
private Car getCar() {
Car car = new Car();
car.setName("AUDI");
car.setModel(2014);
car.setCost(45000);
car.getColors().add("GREY");
car.getColors().add("BLACK");
car.getColors().add("WHITE");
return car;
}
}
package com.websystique.json.gson;
import java.util.ArrayList;
import java.util.List;
public class Car {
private String name;
private int model;
private double cost;
private List<String> colors = new ArrayList<String>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getModel() {
return model;
}
public void setModel(int model) {
this.model = model;
}
public double getCost() {
return cost;
}
public void setCost(double cost) {
this.cost = cost;
}
public List<String> getColors() {
return colors;
}
public void setColors(List<String> colors) {
this.colors = colors;
}
}
Run it. Following output is generated:
Original JSON : {"name":"AUDI","model":2014,"cost":45000.0,"colors":["GREY","BLACK","WHITE"]}
Updated JSON : {"name":"AUDI","model":2014,"colors":["RED","BLACK","WHITE"],"power":"300BHP"}
That’s it. In the next post we will learn about Google Gson Streaming API.
References
If you like tutorials on this site, why not take a step further and connect me on Facebook , Google Plus & Twitter as well? I would love to hear your thoughts on these articles, it will help improve further our learning process.