class JsonReader

public class JsonReader {
    public init(inputStream: InputStream)
}

功能:此类提供 JSON 数据流转仓颉对象的反序列化能力。

示例:

使用示例见使用 Json Stream 进行反序列化

init(InputStream)

public init(inputStream: InputStream)

功能:根据输入流创建一个 JsonReaderJsonReader 从输入流中读取数据时,将跳过非 JsonString 中的空字符('\0', '\t', '\n', '\r')。

参数:

  • inputStream: InputStream - 输入的 JSON 数据流。

func endArray()

public func endArray(): Unit

功能:从输入流的当前位置跳过空白字符后消耗一个 ']' 字符,endArray 必须有一个 startArray 与之对应。

异常:

func endObject()

public func endObject(): Unit

功能:从输入流的当前位置跳过空白字符后消耗一个 '}' 字符,endObject 必须有一个 startObject 与之对应。

异常:

func peek()

public func peek(): Option<JsonToken>

功能:获取输入流的下一个 JsonToken 的类型,不保证下一个 JsonToken 的格式一定正确。

例:如果输入流中的下一个字符为 't',获取的 JsonToken 将为 JsonToken.Bool,但调用 readValue<Bool>() 不一定成功。

返回值:

异常:

  • IllegalStateException - 如果输入流的下一个字符不在以下范围内:(n, t, f, ", 0~9, -, {, }, [, ])。

func readName()

public func readName(): String

功能:从输入流的当前位置读取一个 name。

返回值:

  • String - 读取出的 name 值。

异常:

func readValue<T>() where T <: JsonDeserializable<T>

public func readValue<T>(): T where T <: JsonDeserializable<T>

功能:从输入流的当前位置读取一个 value。

注意:

当泛型 T 是 String 类型时,根据下一个 JsonToken 的不同,该函数的返回值将会不同:

返回值:

  • T - 读取出的 value 值。

异常:

func skip()

public func skip(): Unit

功能:从输入流的当前位置跳过一组数据。

说明:

Skip 的规则如下:

  • 如果 next token 是 value,跳过这个 value, 跳过 value 时不检查该 value 格式是否正确。

  • 如果 next token 是 Name,跳过 (name + value) 这一个组合。

  • 如果 next token 是 BeginArray,跳过这个 array。

  • 如果 next token 是 BeginObject,跳过这个 object。

  • 如果 next token 是 EndArray 或者 EndObject 或者 None,不做任何操作,peek 仍返回 EndArray 或者 EndObject 或者 None。

异常:

func startArray()

public func startArray(): Unit

功能:从输入流的当前位置跳过空白字符后消耗一个 '[' 字符。

异常:

func startObject()

public func startObject(): Unit

功能:从输入流的当前位置跳过空白字符后消耗一个 '{' 字符。

异常:

class JsonWriter

public class JsonWriter {
    public init(out: OutputStream)
}

JsonWriter 提供了将仓颉对象序列化到 OutputStream 的能力。

JsonWriter 需要和 interface JsonSerializable 搭配使用,JsonWriter 可以通过 writeValue 来将实现了 JsonSerializable 接口的类型写入到 Stream 中。

注意:

JsonWriter 中使用缓存来减少写入 Stream 时的 IO 次数,在结束使用 JsonWriter 之前需要调用 flush 函数来确保缓存中的数据全部写入 Stream。

示例:

使用示例见使用 Json Stream 进行序列化

init(OutputStream)

public init(out: OutputStream)

功能:构造函数,构造一个将数据写入 out 的实例。

参数:

var writeConfig

public var writeConfig = WriteConfig.compact

功能:序列化格式配置。详见 WriteConfig

func endArray()

public func endArray(): Unit

功能:结束序列化当前的 JSON 数组。

异常:

func endObject()

public func endObject(): Unit

功能:结束序列化当前的 JSON object。

异常:

func flush()

public func flush(): Unit

功能:将缓存中的数据写入 out,并且调用 out 的 flush 方法。

func jsonValue()

public func jsonValue(value: String): JsonWriter

功能: 将符合JSON value规范的原始字符串写入stream。

注意:

此函数不会对值 value 进行转义,也不会为入参添加双引号。如果使用者能够保证输入的值 value 符合数据转换标准ECMA-404 The JSON Data Interchange Standard, 建议使用该函数。

返回值:

异常:

func startArray()

public func startArray(): Unit

功能:开始序列化一个新的 JSON 数组,每一个 startArray 都必须有一个 endArray 对应。

异常:

func startObject()

public func startObject(): Unit

功能:开始序列化一个新的 JSON object,每一个 startObject 都必须有一个 endObject 对应。

异常:

func writeName(String)

public func writeName(name: String): JsonWriter

功能:在 object 结构中写入 name。

返回值:

异常:

func writeNullValue()

public func writeNullValue(): JsonWriter

功能:向流中写入 JSON value null。

返回值:

异常:

func writeValue<T>(T) where T <: JsonSerializable

public func writeValue<T>(v: T): JsonWriter where T <: JsonSerializable

功能:将实现了 JsonSerializable 接口的类型写入到 Stream 中。该接口会调用泛型 T 的 toJson 方法向输出流中写入数据。

json.stream 包已经为基础类型 Int64UInt64Float64BoolString类型扩展实现了 JsonSerializable, 并且为 Collection 类型 ArrayArrayListHashMap 扩展实现了 JsonSerializable

返回值:

异常: