?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
JsonWriter
版本:Android 4.0 r1
?
結(jié)構(gòu)
繼承關(guān)系
public final class?JSonWriter?extends?Object implements Closeable?
????????
java.lang.Object
android.util.JsonWriter
??????????????????
類概述
輸出JSON(RFC4627)的流編碼值,每次一個(gè)token。這個(gè)流值包括文字內(nèi)容(字符串,數(shù)字布爾值,nulls)以及對象和數(shù)組的開始和結(jié)束符。
?
JSON編碼
???????? 將數(shù)據(jù)編碼為JSON格式,創(chuàng)建一個(gè)JsonWriter對象。每個(gè)JSON文件必須包含一個(gè)頂層的數(shù)組或者對象。嵌套數(shù)組和對象必須如下調(diào)用方法來組織內(nèi)容:
l?? 寫數(shù)組,首先要調(diào)用beginArray()。用適當(dāng)?shù)?/span>value()方法或嵌套其他數(shù)組和對象為每個(gè)元素賦值。最后關(guān)閉數(shù)組調(diào)用endArray()。
l?? 寫對象,首先調(diào)用beginObject()。通過交替調(diào)用name(String)方法循環(huán)寫入對象屬性值。用適當(dāng)?shù)?/span>value()方法或嵌套其他數(shù)組和對象寫入熟悉值。最后關(guān)閉對象調(diào)用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
? ? ?}
? ?}
?]}
如下表示以上信息結(jié)構(gòu):
? ?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可用于來寫一個(gè)JSON流。這個(gè)類的實(shí)例不是線程安全的。調(diào)用JsonWriter產(chǎn)生一個(gè)不規(guī)則JSON字符串會拋出異常IllegalStateException。
?
構(gòu)造方法
??? public JsonWriter (Writer out)
???????? 創(chuàng)建一個(gè)新的JSON編碼流的實(shí)例。為了獲得最佳性能,需要確保Write緩沖,必要時(shí)強(qiáng)制轉(zhuǎn)換為BufferedWriter。
?
公共方法
public JsonWriter beginArray()
開始一個(gè)新的數(shù)組編碼。每次調(diào)用這個(gè)方法必須調(diào)用一個(gè)endArray()進(jìn)行配對。
???????? 返回值
?????????????????? JsonWriter對象。
???????? 異常
?????????????????? IOException
?
public JsonWriter beginObject()
開始一個(gè)新的對象編碼。每次調(diào)用這個(gè)方法必須調(diào)用一個(gè)endObject ()進(jìn)行配對。
???????? 返回值
?????????????????? JsonWriter對象。
???????? 異常
?????????????????? IOException
?
public void close()
刷新和關(guān)閉實(shí)例對象和底層Writer。
???????? 異常
?????????????????? IOException???? 如果JSON文件不完整拋出此異常。
?
public JsonWriter endArray()
??????? 結(jié)束當(dāng)前編碼數(shù)組
???????? 返回值
?????????????????? JsonWriter對象。
???????? 異常
?????????????????? IOException
?
public JsonWriter endObject()
結(jié)束當(dāng)前編碼對象
???????? 返回值
?????????????????? JsonWriter對象。
???????? 異常
?????????????????? IOException
?
public void flush()
確保所有緩存數(shù)據(jù)寫入底層Writer并刷新(flush)這個(gè)實(shí)例對象。
?
public boolean isLenient()
如果writer對象是不嚴(yán)格的語法規(guī)則返回true。
?
public JsonWriter name(String name)
編碼屬性名
???????? 參數(shù)
?????????????????? name??????? 將被賦值對象的名字,不允許使用空值。
???????? 返回值
?????????????????? JsonWriter對象。
???????? 異常
?????????????????? IOException
?
public JsonWriter nullValue()
編碼空值。
???????? 返回值
?????????????????? 對象本身。
???????? 異常
?????????????????? IOException
?
public void setIndent(String indent)
為編碼文檔每一級設(shè)置縮進(jìn)字符串。如果indent.isEmpty()返回true編碼文檔將被壓縮,否則編碼文檔將更加易讀。
???????? 參數(shù)
?????????????????? indent?????? 一個(gè)僅包含空格的字符串。
?
public void setLenient(boolean lenient)
配置writer對象使其使用不嚴(yán)格的語法規(guī)則。默認(rèn)情況下,此writer對象只能發(fā)送符合RFC 4627語法規(guī)則的JSON。設(shè)置允許writer不嚴(yán)格規(guī)則如下:
l?? 最頂層的值可以是任何類型。嚴(yán)格來說,最頂層的值必須是一個(gè)對象或者數(shù)組。
l?? 數(shù)字可以是非數(shù)值類型或無限大。
?
public JsonWriter value(double value)
編碼屬性值
參數(shù)
???????? Value ????? 一個(gè)限定的值。不能是非數(shù)值或無限大的數(shù)(NaNs),除非writer對象是不嚴(yán)格的。
返回值
???????? Writer對象
異常
???????? IOException
????????
public JsonWriter value(long value)
編碼屬性值
返回值
???????? Writer對象
異常
???????? IOException
?
public JsonWriter value(Number value)
編碼屬性值
參數(shù)
???????? Value ????? 一個(gè)限定的值。不能是非數(shù)值或無限大的數(shù)(NaNs),除非writer對象是不嚴(yán)格的。
返回值
???????? Writer對象
異常
???????? IOException
?
public JsonWriter value(boolean value)
編碼屬性值
返回值
???????? Writer對象
異常
???????? IOException
?
public JsonWriter value(String value)
編碼屬性值
參數(shù)
???????? Value ????? 一個(gè)字符串值,或者空值來編碼空字符
返回值
???????? Writer對象
異常
???????? IOException
?
補(bǔ)充
?????????文章精選
?????????????????? Android JSON寫入類 - JsonWriter
?????????????????? JDOM創(chuàng)建XML例子
?