Andy
Andy

Reputation: 195

How to create this json string using Jackson?

Here's my desired output

{"node":{"type":"community","field_incentives":{"und":[{"value":"fun"},{"value":"nice"}]},"field_community_email":{"und":[{"value":"[email protected]"}]}}}

Here's my code but it does not seem to generate the output above. If there's a better and simpler way to do this, please let me know. Thanks

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonFactory f = new JsonFactory();
JsonGenerator g = f.createJsonGenerator(outputStream);
g.writeStartObject();
g.writeObjectFieldStart("node");
g.writeStringField("type", "community");
g.writeObjectFieldStart("field_incentives");
g.writeFieldName("und");
g.writeStartArray();
???I don't know how to make [{"value":"fun"},{"value":"nice"}]
g.writeEndArray();
g.writeEndObject();
g.close();

Upvotes: 10

Views: 12169

Answers (2)

swemon
swemon

Reputation: 5946

I simply write line by line to your output json file Reference JsonGenerator. Hope it will help.

import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonMappingException;

public class CopyOfJacksonStreamExample {
   public static void main(String[] args) {

     try {

    JsonFactory jfactory = new JsonFactory();

    /*** write to file ***/
    JsonGenerator jGenerator = jfactory.createJsonGenerator(new File(
            "c:\\user.json"), JsonEncoding.UTF8);
    jGenerator.writeStartObject(); // {

    jGenerator.writeObjectFieldStart("node"); // node: {
    jGenerator.writeStringField("type", "community"); // "type" : "community"

    jGenerator.writeObjectFieldStart("field_incentives"); // "field_incentives" : {
    jGenerator.writeFieldName("und"); // "und" :
    jGenerator.writeStartArray(); // [
    jGenerator.writeStartObject(); // {
    jGenerator.writeStringField("value", "fun"); // "value" : "fun"
    jGenerator.writeStringField("value", "nice"); // "value" : "nice"
    jGenerator.writeEndObject(); // }
    jGenerator.writeEndArray(); // ]
    jGenerator.writeEndObject(); // } end of field_incentives

    jGenerator.writeObjectFieldStart("field_community_email"); // "field_community_email" : {
    jGenerator.writeFieldName("und"); // "und" :
    jGenerator.writeStartArray(); // [
    jGenerator.writeStartObject(); // {
    jGenerator.writeStringField("value", "[email protected]"); // "value" : "fun"
    jGenerator.writeEndObject(); // }
    jGenerator.writeEndArray(); // ]
    jGenerator.writeEndObject(); // } end of field_community_email

    jGenerator.writeEndObject(); // } end of node
    jGenerator.writeEndObject(); // }

    jGenerator.close();

     } catch (JsonGenerationException e) {

    e.printStackTrace();

     } catch (JsonMappingException e) {

    e.printStackTrace();

     } catch (IOException e) {

    e.printStackTrace();

     }

   }

}

Upvotes: 15

Ilya
Ilya

Reputation: 29703

Using POJOs
Main

public class Main {

    private Node node;

    // getters/setters  

Node

public class Node {

    private String type;

    private FieldIncentives field_incentives;

    private FieldIncentives field_community_email;

    // getters/setters  

FieldIncentives

public class FieldIncentives {

    private List<Holder> und;

    // getters/setters  

Holder

public class Holder {

    private String value;

    // getters/setters  

Usage

final ObjectMapper o = new ObjectMapper();
final Main m = o.readValue(new File("exampleJson.json"), Main.class);

Upvotes: 1

Related Questions