Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/android/util/JsonWriter#pubctors) \| [Methods](https://developer.android.com/reference/android/util/JsonWriter#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/util/JsonWriter#inhmethods)

# JsonWriter

*** ** * ** ***

` public final class JsonWriter `   
` extends https://developer.android.com/reference/java/lang/Object ` ` implements https://developer.android.com/reference/java/io/Closeable `

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.util.JsonWriter |

<br />

*** ** * ** ***

Writes a JSON ([RFC 4627](http://www.ietf.org/rfc/rfc4627.txt)) 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:

- To write **arrays** , first call `https://developer.android.com/reference/android/util/JsonWriter#beginArray()`. Write each of the array's elements with the appropriate `https://developer.android.com/reference/android/util/JsonWriter#value(boolean)` methods or by nesting other arrays and objects. Finally close the array using `https://developer.android.com/reference/android/util/JsonWriter#endArray()`.
- To write **objects** , first call `https://developer.android.com/reference/android/util/JsonWriter#beginObject()`. Write each of the object's properties by alternating calls to `https://developer.android.com/reference/android/util/JsonWriter#name(java.lang.String)` with the property's value. Write property values with the appropriate `https://developer.android.com/reference/android/util/JsonWriter#value(boolean)` method or by nesting other objects or arrays. Finally close the object using `https://developer.android.com/reference/android/util/JsonWriter#endObject()`.

### 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 `https://developer.android.com/reference/java/lang/IllegalStateException`.

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/util/JsonWriter#JsonWriter(java.io.Writer)(https://developer.android.com/reference/java/io/Writer out) ` Creates a new instance that writes a JSON-encoded stream to `out`. |

| ### Public methods ||
|---|---|
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#beginArray()() ` Begins encoding a new array. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#beginObject()() ` Begins encoding a new object. |
| ` void` | ` https://developer.android.com/reference/android/util/JsonWriter#close()() ` Flushes and closes this writer and the underlying `https://developer.android.com/reference/java/io/Writer`. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#endArray()() ` Ends encoding the current array. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#endObject()() ` Ends encoding the current object. |
| ` void` | ` https://developer.android.com/reference/android/util/JsonWriter#flush()() ` Ensures all buffered data is written to the underlying `https://developer.android.com/reference/java/io/Writer` and flushes that writer. |
| ` boolean` | ` https://developer.android.com/reference/android/util/JsonWriter#isLenient()() ` Returns true if this writer has relaxed syntax rules. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#name(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Encodes the property name. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#nullValue()() ` Encodes `null`. |
| ` void` | ` https://developer.android.com/reference/android/util/JsonWriter#setIndent(java.lang.String)(https://developer.android.com/reference/java/lang/String indent) ` Sets the indentation string to be repeated for each level of indentation in the encoded document. |
| ` void` | ` https://developer.android.com/reference/android/util/JsonWriter#setLenient(boolean)(boolean lenient) ` Configure this writer to relax its syntax rules. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#value(double)(double value) ` Encodes `value`. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#value(java.lang.Number)(https://developer.android.com/reference/java/lang/Number value) ` Encodes `value`. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#value(boolean)(boolean value) ` Encodes `value`. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#value(long)(long value) ` Encodes `value`. |
| ` https://developer.android.com/reference/android/util/JsonWriter` | ` https://developer.android.com/reference/android/util/JsonWriter#value(java.lang.String)(https://developer.android.com/reference/java/lang/String value) ` Encodes `value`. |

### Inherited methods

From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.
From interface ` https://developer.android.com/reference/java/io/Closeable ` ` abstract void` ` https://developer.android.com/reference/java/io/Closeable#close()() `

Closes this stream and releases any system resources associated with it.
From interface ` https://developer.android.com/reference/java/lang/AutoCloseable ` ` abstract void` ` https://developer.android.com/reference/java/lang/AutoCloseable#close()() `

Closes this resource, relinquishing any underlying resources.

## Public constructors

### JsonWriter

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter (Writer out)
```

Creates a new instance that writes a JSON-encoded stream to `out`. For best performance, ensure `https://developer.android.com/reference/java/io/Writer` is buffered; wrapping in `https://developer.android.com/reference/java/io/BufferedWriter` if necessary.

<br />

| Parameters ||
|---|---|
| `out` | `Writer` <br /> |

## Public methods

### beginArray

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter beginArray ()
```

Begins encoding a new array. Each call to this method must be paired with a call to `https://developer.android.com/reference/android/util/JsonWriter#endArray()`.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### beginObject

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter beginObject ()
```

Begins encoding a new object. Each call to this method must be paired with a call to `https://developer.android.com/reference/android/util/JsonWriter#endObject()`.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### close

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void close ()
```

Flushes and closes this writer and the underlying `https://developer.android.com/reference/java/io/Writer`.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if the JSON document is incomplete. |

### endArray

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter endArray ()
```

Ends encoding the current array.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### endObject

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter endObject ()
```

Ends encoding the current object.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### flush

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void flush ()
```

Ensures all buffered data is written to the underlying `https://developer.android.com/reference/java/io/Writer` and flushes that writer.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### isLenient

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean isLenient ()
```

Returns true if this writer has relaxed syntax rules.

<br />

| Returns ||
|---|---|
| `boolean` | <br /> |

### name

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter name (String name)
```

Encodes the property name.

<br />

| Parameters ||
|---|---|
| `name` | `String`: the name of the forthcoming value. May not be null. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### nullValue

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter nullValue ()
```

Encodes `null`.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### setIndent

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public 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.

<br />

| Parameters ||
|---|---|
| `indent` | `String`: a string containing only whitespace. <br /> |

### setLenient

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public 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](http://www.ietf.org/rfc/rfc4627.txt). 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 `https://developer.android.com/reference/java/lang/Double#isNaN()` or `https://developer.android.com/reference/java/lang/Double#isInfinite()`.

<br />

<br />

| Parameters ||
|---|---|
| `lenient` | `boolean` <br /> |

### value

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter value (double value)
```

Encodes `value`.

<br />

| Parameters ||
|---|---|
| `value` | `double`: a finite value. May not be `https://developer.android.com/reference/java/lang/Double#isNaN()` or `https://developer.android.com/reference/java/lang/Double#isInfinite()` unless this writer is lenient. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### value

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter value (Number value)
```

Encodes `value`.

<br />

| Parameters ||
|---|---|
| `value` | `Number`: a finite value. May not be `https://developer.android.com/reference/java/lang/Double#isNaN()` or `https://developer.android.com/reference/java/lang/Double#isInfinite()` unless this writer is lenient. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### value

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter value (boolean value)
```

Encodes `value`.

<br />

| Parameters ||
|---|---|
| `value` | `boolean` <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### value

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter value (long value)
```

Encodes `value`.

<br />

| Parameters ||
|---|---|
| `value` | `long` <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |

### value

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public JsonWriter value (String value)
```

Encodes `value`.

<br />

| Parameters ||
|---|---|
| `value` | `String`: the literal string value, or null to encode a null literal. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/util/JsonWriter` | this writer. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |