Android中文API(144) —— JsonWriter

 

前言

  本章内容android.util.JsonWriter章节,版本为Android 4.0 r1,翻译来自:"yddido",欢迎访问他的博客:"http://blog.csdn.net/yddido",再次感谢他 !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com。

 

声明

  欢迎转载,但请保留文章原始出处:) 

    博客园:http://www.cnblogs.com/

    Android中文翻译组:http://androidbox.sinaapp.com/

 

 

JsonWriter

译者署名:yddido

译者链接:http://blog.csdn.net/yddido

版本:Android 4.0 r1

 

结构

继承关系

public final class JSonWriter extends Object implements Closeable 

        

java.lang.Object

android.util.JsonWriter

                  

类概述

输出JSONRFC4627)的流编码值,每次一个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例子

posted @ 2011-12-21 10:43  农民伯伯  阅读(7010)  评论(0编辑  收藏  举报