Class JsonWriter

  • All Implemented Interfaces:
    Closeable, Flushable, AutoCloseable

    public class JsonWriter
    extends Object
    implements Closeable, Flushable
    Writes a JSON (RFC 8259) 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. Call methods on the writer as you walk the structure's contents, nesting arrays and objects as necessary:

    Configuration

    The behavior of this writer can be customized with the following methods: The default configuration of JsonWriter instances used internally by the Gson class differs, and can be adjusted with the various GsonBuilder methods.

    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) throws IOException {
       JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
       writer.setIndent("    ");
       writeMessagesArray(writer, messages);
       writer.close();
     }
    
     public void writeMessagesArray(JsonWriter writer, List<Message> messages) throws IOException {
       writer.beginArray();
       for (Message message : messages) {
         writeMessage(writer, message);
       }
       writer.endArray();
     }
    
     public void writeMessage(JsonWriter writer, Message message) throws IOException {
       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();
     }
    
     public void writeUser(JsonWriter writer, User user) throws IOException {
       writer.beginObject();
       writer.name("name").value(user.getName());
       writer.name("followers_count").value(user.getFollowersCount());
       writer.endObject();
     }
    
     public void writeDoublesArray(JsonWriter writer, List<Double> doubles) throws IOException {
       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
    Author:
    Jesse Wilson