©
This document uses PHP Chinese website manual Release
JsonWriter
版本:Android 4.0 r1
结构
继承关系
public final class JSonWriter extends Object implements Closeable
java.lang.Object
android.util.JsonWriter
类概述
输出JSON(RFC4627)的流编码值,每次一个token。这个流值包括文字内容(字符串,数字布尔值,nulls)以及对象和数组的开始和结束符。
JSON编码
将数据编码为JSON格式,创建一个JsonWriter对象。每个JSON文件必须包含一个顶层的数组或者对象。嵌套数组和对象必须如下调用方法来组织内容:
l 写数组,首先要调用beginArray()。用适当的value()方法或嵌套其他数组和对象为每个元素赋值。最后关闭数组调用endArray()。
l 写对象,首先调用beginObject()。通过交替调用name(String)方法循环写入对象属性值。用适当的value()方法或嵌套其他数组和对象写入熟悉值。最后关闭对象调用endObject()。
例子
编写流信息如下:
[
{
"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
}
}
]}
如下表示以上信息结构:
public void writeJsonStream(OutputStream out, List 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 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 doubles) throws IOException {
writer.beginArray();
for (Double value : doubles) {
writer.value(value);
}
writer.endArray();
}}
JsonWriter可用于来写一个JSON流。这个类的实例不是线程安全的。调用JsonWriter产生一个不规则JSON字符串会抛出异常IllegalStateException。
构造方法
public JsonWriter (Writer out)
创建一个新的JSON编码流的实例。为了获得最佳性能,需要确保Write缓冲,必要时强制转换为BufferedWriter。
公共方法
public JsonWriter beginArray()
开始一个新的数组编码。每次调用这个方法必须调用一个endArray()进行配对。
返回值
JsonWriter对象。
异常
IOException
public JsonWriter beginObject()
开始一个新的对象编码。每次调用这个方法必须调用一个endObject ()进行配对。
返回值
JsonWriter对象。
异常
IOException
public void close()
刷新和关闭实例对象和底层Writer。
异常
IOException 如果JSON文件不完整抛出此异常。
public JsonWriter endArray()
结束当前编码数组
返回值
JsonWriter对象。
异常
IOException
public JsonWriter endObject()
结束当前编码对象
返回值
JsonWriter对象。
异常
IOException
public void flush()
确保所有缓存数据写入底层Writer并刷新(flush)这个实例对象。
public boolean isLenient()
如果writer对象是不严格的语法规则返回true。
public JsonWriter name(String name)
编码属性名
参数
name 将被赋值对象的名字,不允许使用空值。
返回值
JsonWriter对象。
异常
IOException
public JsonWriter nullValue()
编码空值。
返回值
对象本身。
异常
IOException
public void setIndent(String indent)
为编码文档每一级设置缩进字符串。如果indent.isEmpty()返回true编码文档将被压缩,否则编码文档将更加易读。
参数
indent 一个仅包含空格的字符串。
public void setLenient(boolean lenient)
配置writer对象使其使用不严格的语法规则。默认情况下,此writer对象只能发送符合RFC 4627语法规则的JSON。设置允许writer不严格规则如下:
l 最顶层的值可以是任何类型。严格来说,最顶层的值必须是一个对象或者数组。
l 数字可以是非数值类型或无限大。
public JsonWriter value(double value)
编码属性值
参数
Value 一个限定的值。不能是非数值或无限大的数(NaNs),除非writer对象是不严格的。
返回值
Writer对象
异常
IOException
public JsonWriter value(long value)
编码属性值
返回值
Writer对象
异常
IOException
public JsonWriter value(Number value)
编码属性值
参数
Value 一个限定的值。不能是非数值或无限大的数(NaNs),除非writer对象是不严格的。
返回值
Writer对象
异常
IOException
public JsonWriter value(boolean value)
编码属性值
返回值
Writer对象
异常
IOException
public JsonWriter value(String value)
编码属性值
参数
Value 一个字符串值,或者空值来编码空字符
返回值
Writer对象
异常
IOException
补充
文章精选
Android JSON写入类 - JsonWriter
JDOM创建XML例子