JsonWriter
public
final
class
JsonWriter
extends Object
implements
Closeable
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:
- To write arrays, first call
beginArray()
.
Write each of the array's elements with the appropriate value(boolean)
methods or by nesting other arrays and objects. Finally close the array
using endArray()
.
- To write objects, first call
beginObject()
.
Write each of the object's properties by alternating calls to
name(String)
with the property's value. Write property values with the
appropriate value(boolean)
method or by nesting other objects or arrays.
Finally close the object using 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 IllegalStateException
.
Summary
Public constructors |
JsonWriter(Writer out)
Creates a new instance that writes a JSON-encoded stream to out .
|
Inherited methods |
From
class
java.lang.Object
Object
|
clone()
Creates and returns a copy of this object.
|
boolean
|
equals(Object obj)
Indicates whether some other object is "equal to" this one.
|
void
|
finalize()
Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.
|
final
Class<?>
|
getClass()
Returns the runtime class of this Object .
|
int
|
hashCode()
Returns a hash code value for the object.
|
final
void
|
notify()
Wakes up a single thread that is waiting on this object's
monitor.
|
final
void
|
notifyAll()
Wakes up all threads that are waiting on this object's monitor.
|
String
|
toString()
Returns a string representation of the object.
|
final
void
|
wait(long millis, int nanos)
Causes the current thread to wait until another thread invokes the
notify() method or the
notifyAll() method for this object, or
some other thread interrupts the current thread, or a certain
amount of real time has elapsed.
|
final
void
|
wait(long millis)
Causes the current thread to wait until either another thread invokes the
notify() method or the
notifyAll() method for this object, or a
specified amount of time has elapsed.
|
final
void
|
wait()
Causes the current thread to wait until another thread invokes the
notify() method or the
notifyAll() method for this object.
|
|
From
interface
java.io.Closeable
abstract
void
|
close()
Closes this stream and releases any system resources associated
with it.
|
|
From
interface
java.lang.AutoCloseable
abstract
void
|
close()
Closes this resource, relinquishing any underlying resources.
|
|
Public constructors
JsonWriter
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.
Public methods
beginArray
JsonWriter beginArray ()
Begins encoding a new array. Each call to this method must be paired with
a call to endArray()
.
beginObject
JsonWriter beginObject ()
Begins encoding a new object. Each call to this method must be paired
with a call to endObject()
.
close
void close ()
Flushes and closes this writer and the underlying Writer
.
endArray
JsonWriter endArray ()
Ends encoding the current array.
endObject
JsonWriter endObject ()
Ends encoding the current object.
flush
void flush ()
Ensures all buffered data is written to the underlying Writer
and flushes that writer.
isLenient
boolean isLenient ()
Returns true if this writer has relaxed syntax rules.
name
JsonWriter name (String name)
Encodes the property name.
Parameters |
name |
String :
the name of the forthcoming value. May not be null. |
setIndent
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
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
JsonWriter value (double value)
Encodes value
.
Parameters |
value |
double :
a finite value. May not be NaNs or
infinities unless this writer is lenient. |
value
JsonWriter value (Number value)
Encodes value
.
Parameters |
value |
Number :
a finite value. May not be NaNs or
infinities unless this writer is lenient. |
value
JsonWriter value (boolean value)
Encodes value
.
value
JsonWriter value (long value)
Encodes value
.
value
JsonWriter value (String value)
Encodes value
.
Parameters |
value |
String :
the literal string value, or null to encode a null literal. |