Most visited

Recently visited

Added in API level 11

JsonWriter

public final class JsonWriter
extends Object implements Closeable

java.lang.Object
   ↳ android.util.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 write JSON on Android?",
     "geo": null,
     "user": {
       "name": "android_newb",
       "followers_count": 41
      }
   },
   {
     "id": 912345678902,
     "text": "@android_newb just use android.util.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.

Summary

Public constructors

JsonWriter(Writer out)

Creates a new instance that writes a JSON-encoded stream to out.

Public methods

JsonWriter beginArray()

Begins encoding a new array.

JsonWriter beginObject()

Begins encoding a new object.

void close()

Flushes and closes this writer and the underlying Writer.

JsonWriter endArray()

Ends encoding the current array.

JsonWriter endObject()

Ends encoding the current object.

void flush()

Ensures all buffered data is written to the underlying Writer and flushes that writer.

boolean isLenient()

Returns true if this writer has relaxed syntax rules.

JsonWriter name(String name)

Encodes the property name.

JsonWriter nullValue()

Encodes null.

void setIndent(String indent)

Sets the indentation string to be repeated for each level of indentation in the encoded document.

void setLenient(boolean lenient)

Configure this writer to relax its syntax rules.

JsonWriter value(double value)

Encodes value.

JsonWriter value(Number value)

Encodes value.

JsonWriter value(boolean value)

Encodes value.

JsonWriter value(long value)

Encodes value.

JsonWriter value(String value)

Encodes value.

Inherited methods

From class java.lang.Object
From interface java.io.Closeable
From interface java.lang.AutoCloseable

Public constructors

JsonWriter

Added in API level 11
JsonWriter (Writer out)

Creates a new instance that writes a JSON-encoded stream to out. For best performance, ensure Writer is buffered; wrapping in BufferedWriter if necessary.

Parameters
out Writer

Public methods

beginArray

Added in API level 11
JsonWriter beginArray ()

Begins encoding a new array. Each call to this method must be paired with a call to endArray().

Returns
JsonWriter this writer.
Throws
IOException

beginObject

Added in API level 11
JsonWriter beginObject ()

Begins encoding a new object. Each call to this method must be paired with a call to endObject().

Returns
JsonWriter this writer.
Throws
IOException

close

Added in API level 11
void close ()

Flushes and closes this writer and the underlying Writer.

Throws
IOException if the JSON document is incomplete.

endArray

Added in API level 11
JsonWriter endArray ()

Ends encoding the current array.

Returns
JsonWriter this writer.
Throws
IOException

endObject

Added in API level 11
JsonWriter endObject ()

Ends encoding the current object.

Returns
JsonWriter this writer.
Throws
IOException

flush

Added in API level 11
void flush ()

Ensures all buffered data is written to the underlying Writer and flushes that writer.

Throws
IOException

isLenient

Added in API level 11
boolean isLenient ()

Returns true if this writer has relaxed syntax rules.

Returns
boolean

name

Added in API level 11
JsonWriter name (String name)

Encodes the property name.

Parameters
name String: the name of the forthcoming value. May not be null.
Returns
JsonWriter this writer.
Throws
IOException

nullValue

Added in API level 11
JsonWriter nullValue ()

Encodes null.

Returns
JsonWriter this writer.
Throws
IOException

setIndent

Added in API level 11
void setIndent (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.

Parameters
indent String: a string containing only whitespace.

setLenient

Added in API level 11
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.

Parameters
lenient boolean

value

Added in API level 11
JsonWriter value (double value)

Encodes value.

Parameters
value double: a finite value. May not be NaNs or infinities unless this writer is lenient.
Returns
JsonWriter this writer.
Throws
IOException

value

Added in API level 11
JsonWriter value (Number value)

Encodes value.

Parameters
value Number: a finite value. May not be NaNs or infinities unless this writer is lenient.
Returns
JsonWriter this writer.
Throws
IOException

value

Added in API level 11
JsonWriter value (boolean value)

Encodes value.

Parameters
value boolean
Returns
JsonWriter this writer.
Throws
IOException

value

Added in API level 11
JsonWriter value (long value)

Encodes value.

Parameters
value long
Returns
JsonWriter this writer.
Throws
IOException

value

Added in API level 11
JsonWriter value (String value)

Encodes value.

Parameters
value String: the literal string value, or null to encode a null literal.
Returns
JsonWriter this writer.
Throws
IOException

Hooray!