Class DefaultJsonWriter

java.lang.Object
org.dominokit.jacksonapt.stream.impl.DefaultJsonWriter
All Implemented Interfaces:
JsonWriter

public class DefaultJsonWriter
extends java.lang.Object
implements JsonWriter
Writes a JSON (RFC 4627) encoded value to a stream, one token at a time. The stream includes both literal values (strings, numbers, booleans and nulls) as well as the begin and end delimiters of objects and arrays.

Encoding JSON

To encode your data as JSON, create a new JsonWriter. Each JSON document must contain one top-level array or object. Call methods on the writer as you walk the structure's contents, nesting arrays and objects as necessary:

Example

Suppose we'd like to encode a stream of messages such as the following:
 
 [
   {
     "id": 912345678901,
     "text": "How do I stream JSON in Java?",
     "geo": null,
     "user": {
       "name": "json_newb",
       "followers_count": 41
      }
   },
   {
     "id": 912345678902,
     "text": "@json_newb just use JsonWriter!",
     "geo": [50.454722, -104.606667],
     "user": {
       "name": "jesse",
       "followers_count": 2
     }
   }
 ]
This code encodes the above structure:
   
   public void writeJsonStream(OutputStream out, List<Message> messages) {
     JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
     writer.setIndentSpaces(4);
     writeMessagesArray(writer, messages);
     writer.close();
   }
 <p>
   public void writeMessagesArray(JsonWriter writer, List<Message> messages) {
     writer.beginArray();
     for (Message message : messages) {
       writeMessage(writer, message);
     }
     writer.endArray();
   }
 <p>
   public void writeMessage(JsonWriter writer, Message message) {
     writer.beginObject();
     writer.name("id").value(message.getId());
     writer.name("text").value(message.getText());
     if (message.getGeo() != null) {
       writer.name("geo");
       writeDoublesArray(writer, message.getGeo());
     } else {
       writer.name("geo").nullValue();
     }
     writer.name("user");
     writeUser(writer, message.getUser());
     writer.endObject();
   }
 <p>
   public void writeUser(JsonWriter writer, User user) {
     writer.beginObject();
     writer.name("name").value(user.getName());
     writer.name("followers_count").value(user.getFollowersCount());
     writer.endObject();
   }
 <p>
   public void writeDoublesArray(JsonWriter writer, List<Double> doubles) {
     writer.beginArray();
     for (Double value : doubles) {
       writer.value(value);
     }
     writer.endArray();
   }

Each JsonWriter may be used to write a single JSON stream. Instances of this class are not thread safe. Calls that would result in a malformed JSON string will fail with an IllegalStateException.

Since:
1.6
Version:
$Id: $
Author:
Jesse Wilson
  • Constructor Details

    • DefaultJsonWriter

      public DefaultJsonWriter​(java.lang.StringBuilder out)
      Creates a new instance that writes a JSON-encoded stream to out.
      Parameters:
      out - a StringBuilder object.
  • Method Details

    • setIndent

      public final void setIndent​(java.lang.String indent)
      Sets the indentation string to be repeated for each level of indentation in the encoded document. If indent.isEmpty() the encoded document will be compact. Otherwise the encoded document will be more human-readable.
      Specified by:
      setIndent in interface JsonWriter
      Parameters:
      indent - a string containing only whitespace.
    • setLenient

      public final void setLenient​(boolean lenient)
      Configure this writer to relax its syntax rules. By default, this writer only emits well-formed JSON as specified by RFC 4627. Setting the writer to lenient permits the following:
      • Top-level values of any type. With strict writing, the top-level value must be an object or an array.
      • Numbers may be NaNs or infinities.
      Specified by:
      setLenient in interface JsonWriter
      Parameters:
      lenient - a boolean.
    • isLenient

      public boolean isLenient()
      Returns true if this writer has relaxed syntax rules.
      Returns:
      a boolean.
    • setSerializeNulls

      public final void setSerializeNulls​(boolean serializeNulls)
      Sets whether object members are serialized when their value is null. This has no impact on array elements. The default is true.
      Specified by:
      setSerializeNulls in interface JsonWriter
      Parameters:
      serializeNulls - a boolean.
    • getSerializeNulls

      public final boolean getSerializeNulls()

      getSerializeNulls

      Returns true if object members are serialized when their value is null. This has no impact on array elements. The default is true.

      Specified by:
      getSerializeNulls in interface JsonWriter
      Returns:
      a boolean.
    • beginArray

      public DefaultJsonWriter beginArray()
      Begins encoding a new array. Each call to this method must be paired with a call to JsonWriter.endArray().
      Specified by:
      beginArray in interface JsonWriter
      Returns:
      this writer.
    • endArray

      public DefaultJsonWriter endArray()
      Ends encoding the current array.
      Specified by:
      endArray in interface JsonWriter
      Returns:
      this writer.
    • beginObject

      public DefaultJsonWriter beginObject()
      Begins encoding a new object. Each call to this method must be paired with a call to JsonWriter.endObject().
      Specified by:
      beginObject in interface JsonWriter
      Returns:
      this writer.
    • endObject

      public DefaultJsonWriter endObject()
      Ends encoding the current object.
      Specified by:
      endObject in interface JsonWriter
      Returns:
      this writer.
    • name

      public DefaultJsonWriter name​(java.lang.String name)
      Encodes the property name.
      Specified by:
      name in interface JsonWriter
      Parameters:
      name - the name of the forthcoming value. May not be null.
      Returns:
      this writer.
    • unescapeName

      public DefaultJsonWriter unescapeName​(java.lang.String name)
      Encodes the property name without escaping it.
      Specified by:
      unescapeName in interface JsonWriter
      Parameters:
      name - the name of the forthcoming value. May not be null.
      Returns:
      this writer.
    • value

      public DefaultJsonWriter value​(java.lang.String value)
      Encodes value.
      Specified by:
      value in interface JsonWriter
      Parameters:
      value - the literal string value, or null to encode a null literal.
      Returns:
      this writer.
    • unescapeValue

      public DefaultJsonWriter unescapeValue​(java.lang.String value)
      Encodes value without escaping it.
      Specified by:
      unescapeValue in interface JsonWriter
      Parameters:
      value - the literal string value, or null to encode a null literal.
      Returns:
      this writer.
    • nullValue

      public DefaultJsonWriter nullValue()
      Encodes null.
      Specified by:
      nullValue in interface JsonWriter
      Returns:
      this writer.
    • cancelName

      public DefaultJsonWriter cancelName()

      cancelName

      Specified by:
      cancelName in interface JsonWriter
      Returns:
      a JsonWriter object.
    • value

      public DefaultJsonWriter value​(boolean value)
      Encodes value.
      Specified by:
      value in interface JsonWriter
      Parameters:
      value - a boolean.
      Returns:
      this writer.
    • value

      public DefaultJsonWriter value​(double value)
      Encodes value.
      Specified by:
      value in interface JsonWriter
      Parameters:
      value - a finite value. May not be NaNs or infinities.
      Returns:
      this writer.
    • value

      public DefaultJsonWriter value​(long value)
      Encodes value.
      Specified by:
      value in interface JsonWriter
      Parameters:
      value - a long.
      Returns:
      this writer.
    • value

      public DefaultJsonWriter value​(java.lang.Number value)
      Encodes value.
      Specified by:
      value in interface JsonWriter
      Parameters:
      value - a finite value. May not be NaNs or infinities.
      Returns:
      this writer.
    • rawValue

      public DefaultJsonWriter rawValue​(java.lang.Object value)
      Encodes value.toString() as is.
      Specified by:
      rawValue in interface JsonWriter
      Parameters:
      value - a value .
      Returns:
      this writer.
    • flush

      public void flush()
      Ensures all buffered data is written to the underlying StringBuilder and flushes that writer.
      Specified by:
      flush in interface JsonWriter
    • close

      public void close()
      Flushes and closes this writer and the underlying StringBuilder.
      Specified by:
      close in interface JsonWriter
    • encodeString

      public static void encodeString​(java.lang.String value, java.lang.StringBuilder out)

      encodeString.

      Parameters:
      value - a String object.
      out - a StringBuilder object.
    • encodeString

      public static java.lang.String encodeString​(java.lang.String value)

      encodeString

      Parameters:
      value - a String object.
      Returns:
      a String object.
    • getOutput

      public java.lang.String getOutput()

      getOutput

      Specified by:
      getOutput in interface JsonWriter
      Returns:
      the output when the serialization is over