This post explains marshalling a java object to json format and storing it to a file. This can be achieved with the help of ObjectMapper provided by jackson databind package. To explain with an example we will use the below pojo objects
User
public class User {
private Name name;
private String ssn;
private String sex;
private int age;
private PhoneNumber[] phoneNumbers;
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public String getSsn() {
return ssn;
}
public void setSsn(String ssn) {
this.ssn = ssn;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public PhoneNumber[] getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(PhoneNumber[] phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append(name).append(",");
sb.append(ssn).append(",");
sb.append(sex).append(",");
sb.append(age).append(",");
for(PhoneNumber phoneNumber : phoneNumbers) {
sb.append(phoneNumber).append(",");
}
sb.append("}");
return sb.toString();
}
}
Name
public class Name {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append(firstName).append(",");
sb.append(lastName);
sb.append("}");
return sb.toString();
}
}
PhoneNumber
public class PhoneNumber {
private String areaCode;
private String part1;
private String part2;
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append(areaCode).append("-");
sb.append(part1).append("-");
sb.append(part2);
sb.append("}");
return sb.toString();
}
}
Now the main code which does the marshalling from java object to json file.
Main Code
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class MarshallingDemo {
public static void main(String[] args) throws JsonMappingException, JsonGenerationException, IOException {
PhoneNumber phoneNumber1 = new PhoneNumber();
phoneNumber1.setAreaCode("111");
phoneNumber1.setPart1("222");
phoneNumber1.setPart2("3333");
PhoneNumber phoneNumber2 = new PhoneNumber();
phoneNumber2.setAreaCode("444");
phoneNumber2.setPart1("555");
phoneNumber2.setPart2("6666");
PhoneNumber[] phoneNumbers = new PhoneNumber[2];
phoneNumbers[0] = phoneNumber1;
phoneNumbers[1] = phoneNumber2;
Name name = new Name();
name.setFirstName("firstName1");
name.setLastName("lastName1");
User user = new User();
user.setName(name);
user.setSex("M");
user.setSsn("ssn1");
user.setAge(28);
user.setPhoneNumbers(phoneNumbers);
File file = new File("user.json");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(file, user);
}
}
As shown in the main code, we create an instance of ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
Then we instruct the objectMapper to convert the java object to json formant and save to a file as shown below
objectMapper.writeValue(file, user);
Output
{“name”:{“firstName”:”firstName1″,”lastName”:”lastName1″},”ssn”:”ssn1″,”sex”:”M”,”age”:28,”phoneNumbers”:[{“areaCode”:”111″,”part1″:”222″,”part2″:”3333″},{“areaCode”:”444″,”part1″:”555″,”part2″:”6666″}]}
Formatted the output
{
“name”:{
“firstName”:”firstName1″,
“lastName”:”lastName1″
},
“ssn”:”ssn1″,
“sex”:”M”,
“age”:28,
“phoneNumbers”:[
{
“areaCode”:”111″,
“part1″:”222”,
“part2″:”3333”
},
{
“areaCode”:”444″,
“part1″:”555”,
“part2″:”6666”
}
]
}