返回介绍

JsonWriter

发布于 2025-03-09 17:00:22 字数 6165 浏览 0 评论 0 收藏 0

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 例子

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文