I’m attempting to write the output of data generated by JsonGenerator
to console using :
JavaScript
x
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.IOException;
import java.io.StringWriter;
public class JsonGeneratorTest {
public static void main(String args[]) throws IOException {
var out = new StringWriter();
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(out);
generator.useDefaultPrettyPrinter();
generator.writeStartObject();
generator.writeStringField("name", "zhangsan");
generator.writeNumberField("age", 18);
generator.writeEndObject();
System.out.println("Output : "+out.toString());
System.out.println("generator : "+out.getBuffer().toString());
}
}
From the Java docs – https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/io/StringWriter.html:
Shouldn’t the current value written to the Json generator be outputted when I use :
JavaScript
out.getBuffer().toString()
Advertisement
Answer
Issue is not closing the generator, updated code :
JavaScript
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.IOException;
import java.io.StringWriter;
public class JsonGeneratorTest {
public static void main(String args[]) throws IOException {
var out = new StringWriter();
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(out);
generator.useDefaultPrettyPrinter();
generator.writeStartObject();
generator.writeStringField("name", "zhangsan");
generator.writeNumberField("age", 18);
generator.writeEndObject();
generator.close();
generator.getCurrentValue();
System.out.println("Output : "+out);
System.out.println("generator : "+out.getBuffer().toString());
System.out.println("getCurrentValue : "+generator.getCurrentValue());
}
}
prints :
JavaScript
Output : {
"name" : "zhangsan",
"age" : 18
}
generator : {
"name" : "zhangsan",
"age" : 18
}
getCurrentValue : null