Converting Java objects to JSON with Jackson

JavaJsonObjectJackson

Java Problem Overview


I want my JSON to look like this:

{
    "information": [{
        "timestamp": "xxxx",
        "feature": "xxxx",
        "ean": 1234,
        "data": "xxxx"
    }, {
        "timestamp": "yyy",
        "feature": "yyy",
        "ean": 12345,
        "data": "yyy"
    }]
}

Code so far:

import java.util.List;

public class ValueData {
	
	private List<ValueItems> information;

	public ValueData(){
		
	}
	
	public List<ValueItems> getInformation() {
		return information;
	}

	public void setInformation(List<ValueItems> information) {
		this.information = information;
	}
	
	@Override
	public String toString() {
		return String.format("{information:%s}", information);
	}
	
}

and

public class ValueItems {
	
	private String timestamp;
	private String feature;
	private int ean;
	private String data;
	
	
	public ValueItems(){
		
	}
	
	public ValueItems(String timestamp, String feature, int ean, String data){
		this.timestamp = timestamp;
		this.feature = feature;
		this.ean = ean;
		this.data = data;
	}

	public String getTimestamp() {
		return timestamp;
	}

	public void setTimestamp(String timestamp) {
		this.timestamp = timestamp;
	}

	public String getFeature() {
		return feature;
	}

	public void setFeature(String feature) {
		this.feature = feature;
	}

	public int getEan() {
		return ean;
	}

	public void setEan(int ean) {
		this.ean = ean;
	}

	public String getData() {
		return data;
	}

	public void setData(String data) {
		this.data = data;
	}
	
	@Override
	public String toString() {
		return String.format("{timestamp:%s,feature:%s,ean:%s,data:%s}", timestamp, feature, ean, data);
	}
}

I just missing the part how I can convert the Java object to JSON with Jackson:

public static void main(String[] args) {
   // CONVERT THE JAVA OBJECT TO JSON HERE
    System.out.println(json);
}

My Question is: Are my classes correct? Which instance do I have to call and how that I can achieve this JSON output?

Java Solutions


Solution 1 - Java

To convert your object in JSON with Jackson:

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.ObjectWriter; 

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

Solution 2 - Java

I know this is old (and I am new to java), but I ran into the same problem. And the answers were not as clear to me as a newbie... so I thought I would add what I learned.

I used a third-party library to aid in the endeavor: org.codehaus.jackson All of the downloads for this can be found here.

For base JSON functionality, you need to add the following jars to your project's libraries: jackson-mapper-asl and jackson-core-asl

Choose the version your project needs. (Typically you can go with the latest stable build).

Once they are imported in to your project's libraries, add the following import lines to your code:

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;

With the java object defined and assigned values that you wish to convert to JSON and return as part of a RESTful web service

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "[email protected]";

ObjectMapper mapper = new ObjectMapper();
	
try {
	// convert user object to json string and return it 
	return mapper.writeValueAsString(u);
}
catch (JsonGenerationException | JsonMappingException  e) {
    // catch various errors
	e.printStackTrace();
}

The result should looks like this: {"firstName":"Sample","lastName":"User","email":"[email protected]"}

Solution 3 - Java

Just follow any of these:

  • For jackson it should work:

          ObjectMapper mapper = new ObjectMapper();	
          return mapper.writeValueAsString(object);
          //will return json in string
    
  • For gson it should work:

        Gson gson = new Gson();
        return Response.ok(gson.toJson(yourClass)).build();
    

Solution 4 - Java

This might be useful:

objectMapper.writeValue(new File("c:\\employee.json"), employee);

// display to console
Object json = objectMapper.readValue(
     objectMapper.writeValueAsString(employee), Object.class);

System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
     .writeValueAsString(json));

Solution 5 - Java

You could do this:

String json = new ObjectMapper().writeValueAsString(yourObjectHere);

Solution 6 - Java

You can use Google Gson like this

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);

Gson gson = new Gson();
String jsonStr = gson.toJson(user);

Solution 7 - Java

Well, even the accepted answer does not exactly output what op has asked for. It outputs the JSON string but with " characters escaped. So, although might be a little late, I am answering hopeing it will help people! Here is how I do it:

StringWriter writer = new StringWriter();
JsonGenerator jgen = new JsonFactory().createGenerator(writer);
jgen.setCodec(new ObjectMapper());
jgen.writeObject(object);
jgen.close();
System.out.println(writer.toString());


Solution 8 - Java

Note: To make the most voted solution work, attributes in the POJO have to be public or have a public getter/setter:

> By default, Jackson 2 will only work with fields that are either > public, or have a public getter method – serializing an entity that > has all fields private or package private will fail.

Not tested yet, but I believe that this rule also applies for other JSON libs like google Gson.

Solution 9 - Java

public class JSONConvector {

    public static String toJSON(Object object) throws JSONException, IllegalAccessException {
        String str = "";
        Class c = object.getClass();
        JSONObject jsonObject = new JSONObject();
        for (Field field : c.getDeclaredFields()) {
            field.setAccessible(true);
            String name = field.getName();
            String value = String.valueOf(field.get(object));
            jsonObject.put(name, value);
        }
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }


    public static String toJSON(List list ) throws JSONException, IllegalAccessException {
        JSONArray jsonArray = new JSONArray();
        for (Object i : list) {
            String jstr = toJSON(i);
            JSONObject jsonObject = new JSONObject(jstr);
            jsonArray.put(jsonArray);
        }
        return jsonArray.toString();
    }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJustTheAverageGirlView Question on Stackoverflow
Solution 1 - JavaJean LogeartView Answer on Stackoverflow
Solution 2 - Javaf10orf12View Answer on Stackoverflow
Solution 3 - JavaShell ScottView Answer on Stackoverflow
Solution 4 - JavaVickyView Answer on Stackoverflow
Solution 5 - JavaClayton K. N. PassosView Answer on Stackoverflow
Solution 6 - JavaVen RenView Answer on Stackoverflow
Solution 7 - JavaEan VView Answer on Stackoverflow
Solution 8 - JavaZhaoGangView Answer on Stackoverflow
Solution 9 - JavaArtavazd ManukyanView Answer on Stackoverflow