public class JsonWriter extends Object implements Closeable, Flushable
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:
beginArray(). Write
each of the array's elements with the appropriate #changer methods or
by nesting other arrays and objects. Finally close the array using
endArray().
beginObject().
Write each of the object's properties by alternating calls to name(java.lang.String)
with the property's value. Write property values with the appropriate
#changer method or by nesting other objects or arrays. Finally close
the object using endObject().
[
{
"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.
| Constructor and Description |
|---|
JsonWriter(Writer out)
Creates a new instance that writes a JSON-encoded stream to
out. |
| Modifier and Type | Method and Description |
|---|---|
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 |
getSerializeNulls()
Returns true if object members are serialized when their value is null.
|
boolean |
isHtmlSafe()
Returns true if this writer writes JSON that's safe for inclusion in HTML and
XML documents.
|
boolean |
isLenient()
Returns true if this writer has relaxed syntax rules.
|
JsonWriter |
jsonValue(String value)
Writes
value directly to the writer without quoting or escaping. |
JsonWriter |
name(String name)
Encodes the property name.
|
JsonWriter |
nullValue()
Encodes
null. |
void |
setHtmlSafe(boolean htmlSafe)
Configure this writer to emit JSON that's safe for direct inclusion in HTML
and XML documents.
|
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.
|
void |
setSerializeNulls(boolean serializeNulls)
Sets whether object members are serialized when their value is null.
|
JsonWriter |
value(boolean value)
Encodes
value. |
JsonWriter |
value(Boolean value)
Encodes
value. |
JsonWriter |
value(double value)
Encodes
value. |
JsonWriter |
value(long value)
Encodes
value. |
JsonWriter |
value(Number value)
Encodes
value. |
JsonWriter |
value(String value)
Encodes
value. |
public JsonWriter(Writer out)
out. For
best performance, ensure Writer is buffered; wrapping in
BufferedWriter if necessary.public final void setIndent(String indent)
indent.isEmpty() the encoded document will
be compact. Otherwise the encoded document will be more human-readable.indent - a string containing only whitespace.public boolean isLenient()
public final void setLenient(boolean lenient)
NaNs or infinities.
public final boolean isHtmlSafe()
public final void setHtmlSafe(boolean htmlSafe)
<, >,
& and = before writing them to the stream. Without this
setting, your XML/HTML encoder should replace these characters with the
corresponding escape sequences.public final boolean getSerializeNulls()
public final void setSerializeNulls(boolean serializeNulls)
public JsonWriter beginArray() throws IOException
endArray().IOExceptionpublic JsonWriter endArray() throws IOException
IOExceptionpublic JsonWriter beginObject() throws IOException
endObject().IOExceptionpublic JsonWriter endObject() throws IOException
IOExceptionpublic JsonWriter name(String name) throws IOException
name - the name of the forthcoming value. May not be null.IOExceptionpublic JsonWriter value(String value) throws IOException
value.value - the literal string value, or null to encode a null literal.IOExceptionpublic JsonWriter jsonValue(String value) throws IOException
value directly to the writer without quoting or escaping.value - the literal string value, or null to encode a null literal.IOExceptionpublic JsonWriter nullValue() throws IOException
null.IOExceptionpublic JsonWriter value(boolean value) throws IOException
value.IOExceptionpublic JsonWriter value(Boolean value) throws IOException
value.IOExceptionpublic JsonWriter value(double value) throws IOException
value.value - a finite value. May not be NaNs or
infinities.IOExceptionpublic JsonWriter value(long value) throws IOException
value.IOExceptionpublic JsonWriter value(Number value) throws IOException
value.value - a finite value. May not be NaNs or
infinities.IOExceptionpublic void flush()
throws IOException
Writer and
flushes that writer.flush in interface FlushableIOExceptionpublic void close()
throws IOException
Writer.close in interface Closeableclose in interface AutoCloseableIOException - if the JSON document is incomplete.