Convert Java Object To / From JSON, EclipseLink MOXy Example
On this EclipseLink MOXy Example explains about converting a java object to JSON string and JSON string to java Object Using EclipseLink MOXy library.
EclipseLink MOXy component enables Java developers to efficiently bind Java classes to XML Schemas. MOXy implements JAXB allowing developers to provide their mapping information through annotations as well as providing support for storing the mappings in XML format. The many advanced mappings enable developers to handle the complex XML structures without having to mirror the schema in their Java class model.
Reference -> www.eclipse.org/eclipselink/moxy.php
Here I am showing an example about How to convert a Java Object to JSON string and vice versa using EclipseLink MOXy.
Required Libraries
Project structure
Student.java
Here I am creating a pojo class, this will be the converted in to JSON string.
public class Student {
private String firstName="Rockey";
private String lastName="Desousa";
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() {
return "Student [firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
jaxb.properties
just add the following line into jaxb.properties (see the project structure)
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
For converting Java Student Object to JSON string, you can use following method, Here student.json is a file
Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(student, new File("student.json"));
For converting JSON string to Java Student Object, you can use following method
Unmarshaller unmarshaller = jc.createUnmarshaller(); student = (Student) unmarshaller.unmarshal(new File("student.json"));
EclipseLink MOXy Example (Convert Java Object to JSON string)
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put("eclipselink.media-type", "application/json");
JAXBContext jc = JAXBContext.newInstance(new Class[] { Student.class }, properties);
Student student = new Student();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
marshaller.marshal(student, new File("student.json"));
Unmarshaller unmarshaller = jc.createUnmarshaller();
student = (Student) unmarshaller.unmarshal(new File("student.json"));
System.out.println("student details"+student);
}
}
Output (student.json)
{"firstName":"Rockey","lastName":"Desousa"}
Console output
student details Student [firstName=Rockey, lastName=Desousa]
EclipseLink MOXy JSON Pretty Print
If you need to format the JSON string, you can use the following code
//specify the boolean value to true
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put("eclipselink.media-type", "application/json");
JAXBContext jc = JAXBContext.newInstance(new Class[] { Student.class }, properties);
Student student = new Student();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(student, new File("student.json"));
}
}
Output (student.json)
{ "firstName" : "Rockey", "lastName" : "Desousa" }