你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

JsonReader 类

  • java.lang.Object
    • com.azure.json.JsonReader

实现

public abstract class JsonReader
implements Closeable

以令牌流的形式读取 JSON 值。

JsonReader 实例是使用 的 JsonProvider 实例或使用 中的 JsonProviders实用工具方法创建的。

构造函数摘要

构造函数 说明
JsonReader()

创建 JsonReader 的实例。

方法摘要

修饰符和类型 方法和描述
final T getNullable(ReadValueCallback<JsonReader,T> nonNullGetter)

用于读取可为空类型的便捷方法。

final List<T> readArray(ReadValueCallback<JsonReader,T> elementReaderFunc)

读取 JSON 数组。

final Map<String,T> readMap(ReadValueCallback<JsonReader,T> valueReaderFunc)

读取 JSON 映射。

final T readObject(ReadValueCallback<JsonReader,T> objectReaderFunc)

读取 JSON 对象。

abstract JsonReader bufferObject()

读取并返回 指向的当前 JSON 对象 JsonReader

abstract void close()

关闭 JSON 流。

abstract JsonToken currentToken()

获取 JsonToken 读取器当前指向的 。

abstract byte[] getBinary()

如果读取器当前指向 STRING 令牌,则获取二进制值。

abstract boolean getBoolean()

如果读取器当前指向 BOOLEAN 令牌,则获取布尔值。

abstract double getDouble()

如果读取器当前指向 或 STRINGNUMBER则获取双精度值。

abstract String getFieldName()

如果读取器当前指向 , FIELD_NAME则获取字段名称。

abstract float getFloat()

如果读取器当前指向 或 STRINGNUMBER则获取浮点值。

abstract int getInt()

如果读取器当前指向 或 STRINGNUMBER则获取 int 值。

abstract long getLong()

如果读取器当前指向 或 STRINGNUMBER则获取 long 值。

String getRawText()

获取 的原始 currentToken()文本值。

abstract String getString()

如果读取器当前指向 BOOLEAN、、 NULLNUMBERSTRING,则获取 String 值。

final String getText()

获取 的文本 currentToken()值。

final boolean isEndArrayOrObject()

currentToken()END_ARRAY是 还是 END_OBJECT

abstract boolean isResetSupported()

指示 是否 JsonReader 支持 reset()

final boolean isStartArrayOrObject()

currentToken()START_ARRAY是 还是 START_OBJECT

abstract JsonToken nextToken()

循环访问 ,并返回 JSON 编码值中的下一个 JsonToken

final String readChildren()

如果当前令牌为 START_ARRAYSTART_OBJECT,则以递归方式读取 JSON 令牌子流。

final void readChildren(StringBuilder buffer)

如果当前令牌是 START_ARRAYSTART_OBJECT 传入 StringBuilder的 ,则以递归方式读取 JSON 令牌子流。

final String readRemainingFieldsAsJsonObject()

将当前 JSON 对象中的剩余字段作为 JSON 对象读取。

final void readRemainingFieldsAsJsonObject(StringBuilder buffer)

将当前 JSON 对象中的剩余字段作为 JSON 对象读取。

final Object readUntyped()

读取非类型化对象。

abstract JsonReader reset()

创建 JSON 流开头的新 JsonReader 重置。

abstract void skipChildren()

如果当前令牌为 START_ARRAYSTART_OBJECT,则递归跳过 JSON 令牌子流。

方法继承自 java.lang.Object

构造函数详细信息

JsonReader

public JsonReader()

创建 JsonReader 的实例。

方法详细信息

getNullable

public final T getNullable(ReadValueCallback nonNullGetter)

用于读取可为空类型的便捷方法。

currentToken()如果 返回为 NULL null,则JsonReader将其传递到 nonNullGetter 函数以获取值。 实际上,这是 get*NullableValue 方法的泛型。

Parameters:

nonNullGetter - 读取非空 JSON 值的函数。

Returns:

如果 currentToken()NULL 或 返回的值,则为 nonNullGetternull。

Throws:

IOException

- 如果无法读取下一个值,则为可为 null。

readArray

public final List readArray(ReadValueCallback elementReaderFunc)

读取 JSON 数组。

如果 为 null, currentToken() 则为 nextToken()。 如果起始令牌仍为 null, NULL 则返回 null。 如果令牌是 除 之外 START_ARRAY 的任何内容, IllegalStateException 则会引发 。

为读取元素准备 JSON 流后,将获取元素令牌,并将其传递到 JsonReaderelementReaderFunc 处理读取数组的元素。 如果数组没有元素,则将返回空列表。

如果应读取 JSON 对象,请使用 readObject(ReadValueCallback<JsonReader,T> objectReaderFunc) ,或者如果应读取 JSON 映射,请使用 readMap(ReadValueCallback<JsonReader,T> valueReaderFunc)

Parameters:

elementReaderFunc - 读取数组的每个元素的函数。

Returns:

读取 JSON 数组;如果 为 null 或 NULLJsonToken则为 null。

Throws:

IOException

- 如果令牌不是 JsonToken#START_ARRAYJsonToken#NULL或 null。

readMap

public final Map readMap(ReadValueCallback valueReaderFunc)

读取 JSON 映射。

如果 为 null, currentToken() 则为 nextToken()。 如果起始令牌仍为 null, NULL 则返回 null。 如果令牌是 除 之外 START_OBJECT 的任何内容, IllegalStateException 则会引发 。

为键值读取准备 JSON 流后,将获取下一个令牌,并将字段名称作为密钥读取,然后获取之后的下一个令牌,并将其传递到 JsonReadervalueReaderFunc 中以处理读取键值对的值。 如果对象没有元素,则将返回空映射。

如果应读取 JSON 对象,请使用 readObject(ReadValueCallback<JsonReader,T> objectReaderFunc) ,或者如果应读取 JSON 数组,请使用 readArray(ReadValueCallback<JsonReader,T> elementReaderFunc)

Parameters:

valueReaderFunc - 读取键值对的每个值的函数。

Returns:

读取 JSON 映射;如果 为 null 或 NULLJsonToken则为 null。

Throws:

IOException

- 如果令牌不是 JsonToken#START_OBJECTJsonToken#NULL或 null。

readObject

public final T readObject(ReadValueCallback objectReaderFunc)

读取 JSON 对象。

如果 为 null, currentToken() 则为 nextToken()。 如果起始令牌仍为 null, NULL 则返回 null。 如果令牌是 除 之外 START_OBJECT 的任何内容, IllegalStateException 则会引发 。

为读取对象准备 JSON 流后,将获取下一个令牌,并将其传递到 JsonReaderobjectReaderFunc 处理读取对象。

如果应读取 JSON 数组,请使用 readArray(ReadValueCallback<JsonReader,T> elementReaderFunc) ,或者如果应读取 JSON 映射,请使用 readMap(ReadValueCallback<JsonReader,T> valueReaderFunc)

Parameters:

objectReaderFunc - 读取键值对的每个值的函数。

Returns:

读取的 JSON 对象;如果 为 null 或 NULLJsonToken则为 null。

Throws:

IOException

- 如果令牌不是 JsonToken#START_OBJECTJsonToken#NULL或 null。

bufferObject

public abstract JsonReader bufferObject()

读取并返回 指向的当前 JSON 对象 JsonReader 。 这将改变此 JsonReader的当前位置。

currentToken()如果 不是START_OBJECTFIELD_NAMEIllegalStateException,或将引发 。

如果 为 ,currentToken()FIELD_NAME则会创建一个 JSON 对象,其中第一个 JSON 字段是currentToken()字段,这意味着可以从 JSON 对象的中间调用,以创建一个新的 JSON 对象,其中只有一部分字段 () 调用方法时剩余的字段。

返回的 JsonReader 能够 reset() 重播基础 JSON 流。

Returns:

所指向的缓冲 JSON 对象 JsonReader

Throws:

IOException

- #currentToken()如果 不是JsonToken#START_OBJECT,则JsonToken#FIELD_NAME后跟JsonToken#START_OBJECT

close

public abstract void close()

关闭 JSON 流。

Throws:

IOException

- 如果基础内容存储无法关闭。

currentToken

public abstract JsonToken currentToken()

获取 JsonToken 读取器当前指向的 。

如果读取器未指向令牌,则返回 null。 如果读取器尚未开始读取 JSON 值,或者如果 JSON 值的读取已完成,则会出现这种情况。

Returns:

JsonToken读取器当前指向的 ;如果读取器未指向令牌,则为 null。

getBinary

public abstract byte[] getBinary()

如果读取器当前指向 STRING 令牌,则获取二进制值。

这将返回 等效的 Base64#getDecoder()Base64.Decoder#decode(String)

如果读取器指向 NULL ,则将返回 null。 如果读取器指向任何其他标记类型, IllegalStateException 则会引发 。

Returns:

基于当前标记是 STRING 还是 NULL的二进制值。

Throws:

IOException

- 如果读取器未指向 JsonToken#STRINGJsonToken#NULL

getBoolean

public abstract boolean getBoolean()

如果读取器当前指向 BOOLEAN 令牌,则获取布尔值。

如果读取器指向任何其他标记类型, IllegalStateException 则会引发 。

如果 Boolean 应读取,请使用 getNullable(ReadValueCallback<JsonReader,T> nonNullGetter)

Returns:

基于 的 BOOLEAN布尔值。

Throws:

IOException

- 如果读取器未指向 JsonToken#BOOLEAN

getDouble

public abstract double getDouble()

如果读取器当前指向 或 STRINGNUMBER则获取双精度值。

STRING 如果基础字符串值无法转换为双精度值,将引发 NumberFormatException

所有其他 JsonToken 类型都将引发 IllegalStateException

如果 Double 应读取,请使用 getNullable(ReadValueCallback<JsonReader,T> nonNullGetter)

Returns:

基于当前令牌的双精度值。

Throws:

IOException

- 如果当前令牌为 , JsonToken#STRING 并且无法转换为双精度标记。

getFieldName

public abstract String getFieldName()

如果读取器当前指向 , FIELD_NAME则获取字段名称。

所有其他 JsonToken 类型都将引发 IllegalStateException

Returns:

基于当前令牌的字段名称。

Throws:

IOException

- 如果当前令牌不是 。JsonToken#FIELD_NAME

getFloat

public abstract float getFloat()

如果读取器当前指向 或 STRINGNUMBER则获取浮点值。

STRING 如果基础字符串值无法转换为浮点值,将引发 NumberFormatException

所有其他 JsonToken 类型都将引发 IllegalStateException

如果 Float 应读取,请使用 getNullable(ReadValueCallback<JsonReader,T> nonNullGetter)

Returns:

基于当前令牌的浮点值。

Throws:

IOException

- 如果当前令牌为 , JsonToken#STRING 并且无法转换为浮点数。

getInt

public abstract int getInt()

如果读取器当前指向 或 STRINGNUMBER则获取 int 值。

STRING 如果基础字符串值无法转换为 int,将引发 NumberFormatException

所有其他 JsonToken 类型都将引发 IllegalStateException

如果 Integer 应读取,请使用 getNullable(ReadValueCallback<JsonReader,T> nonNullGetter)

Returns:

基于当前标记的 int 值。

Throws:

IOException

- 如果当前令牌是 , JsonToken#STRING 并且无法转换为 int。

getLong

public abstract long getLong()

如果读取器当前指向 或 STRINGNUMBER则获取 long 值。

STRING 如果基础字符串值无法转换为 long,将引发 NumberFormatException

所有其他 JsonToken 类型都将引发 IllegalStateException

如果 Long 应读取,请使用 getNullable(ReadValueCallback<JsonReader,T> nonNullGetter)

Returns:

基于当前标记的 long 值。

Throws:

IOException

- 如果当前令牌为 , JsonToken#STRING 并且无法转换为 long。

getRawText

public String getRawText()

获取 的原始 currentToken()文本值。

下面介绍了每种 JsonToken 类型的处理方式:

如果当前令牌为 null, IllegalStateException 则会引发 。

Returns:

的原始文本值 currentToken()

Throws:

IOException

- 如果当前令牌为 null。

getString

public abstract String getString()

如果读取器当前指向 BOOLEAN、、 NULLNUMBERSTRING,则获取 String 值。

如果当前标记为 BOOLEAN,则 NUMBER 返回值的字符串表示形式。 如果当前令牌为 NULL null,则将返回 。

所有其他 JsonToken 类型都将引发 IllegalStateException

Returns:

基于当前令牌的 String 值。

Throws:

IOException

- 如果当前令牌不是 JsonToken#BOOLEANJsonToken#NULLJsonToken#NUMBERJsonToken#STRING

getText

public final String getText()

获取 的文本 currentToken()值。

下面介绍了每种 JsonToken 类型的处理方式:

如果当前令牌为 null, IllegalStateException 则会引发 。

Returns:

的文本值 currentToken()

Throws:

IOException

- 如果当前令牌为 null。

isEndArrayOrObject

public final boolean isEndArrayOrObject()

currentToken()END_ARRAY是 还是 END_OBJECT

Returns:

isResetSupported

public abstract boolean isResetSupported()

指示 是否 JsonReader 支持 reset()

Returns:

是否 reset() 受支持。

isStartArrayOrObject

public final boolean isStartArrayOrObject()

currentToken()START_ARRAY是 还是 START_OBJECT

Returns:

nextToken

public abstract JsonToken nextToken()

循环访问 ,并返回 JSON 编码值中的下一个 JsonToken

如果循环访问下一个令牌完成 JSON 编码值的读取,则返回 null。

Returns:

JSON 编码值中的下一个 JsonToken ;如果读取完成,则为 null。

Throws:

IOException

- 如果无法确定下一个标记。

readChildren

public final String readChildren()

如果当前令牌为 START_ARRAYSTART_OBJECT,则以递归方式读取 JSON 令牌子流。

如果 不是START_OBJECTcurrentToken()START_ARRAY不会读取任何内容。

Returns:

JSON 令牌子流的原始文本值。

Throws:

IOException

- 如果无法读取子级,则为 。

readChildren

public final void readChildren(StringBuilder buffer)

如果当前令牌是 START_ARRAYSTART_OBJECT 传入 StringBuilder的 ,则以递归方式读取 JSON 令牌子流。

如果 不是START_OBJECTcurrentToken()START_ARRAY不会读取任何内容。

Parameters:

buffer - 读取 StringBuilder 子流将写入的 。

Throws:

IOException

- 如果 buffer 为 null。

readRemainingFieldsAsJsonObject

public final String readRemainingFieldsAsJsonObject()

将当前 JSON 对象中的剩余字段作为 JSON 对象读取。

如果 为 START_OBJECTcurrentToken()则其函数与 readChildren()相同。 如果 为 ,currentToken()FIELD_NAME则创建一个 JSON 对象,其中第一个字段是当前字段,并读取 JSON 对象中的剩余字段。

如果 不是START_OBJECTcurrentToken()FIELD_NAME不会读取任何内容。

Returns:

剩余 JSON 字段的原始文本值。

Throws:

IOException

- 如果无法读取剩余的 JSON 字段。

readRemainingFieldsAsJsonObject

public final void readRemainingFieldsAsJsonObject(StringBuilder buffer)

将当前 JSON 对象中的剩余字段作为 JSON 对象读取。

如果 为 START_OBJECTcurrentToken()则其函数与 readChildren(StringBuilder buffer)相同。 如果 为 ,currentToken()FIELD_NAME则创建一个 JSON 对象,其中第一个字段是当前字段,并读取 JSON 对象中的剩余字段。

如果 不是START_OBJECTcurrentToken()FIELD_NAME不会读取任何内容。

Parameters:

buffer - 将 StringBuilder 写入其余 JSON 字段的 。

Throws:

IOException

- 如果 buffer 为 null。

readUntyped

public final Object readUntyped()

读取非类型化对象。

如果 为 null, currentToken() 则为 nextToken()

如果起始标记为 END_ARRAYEND_OBJECTFIELD_NAMEIllegalStateException ,则会引发 ,因为这些是读取未知类型的无效起点。 如果非类型化对象已深入嵌套, IllegalStateException 则还会引发 ,以防止堆栈溢出异常。

返回的对象将是下列对象之一:

  • 如果起始令牌为 null,则为 null,或者 NULL
  • 如果起始令牌为 ,则为 true 或 false BOOLEAN
  • int、long、float 或 double 之一是起始标记为 NUMBER,如果数字为整数,则将使用最小包含值
  • 非类型化元素的数组(如果起始点为 ) START_ARRAY
  • 如果起点为 ,则为字符串非类型化值的映射 START_OBJECT

Returns:

基于上面概述的返回类型的非类型化值。

Throws:

IOException

- 如果对象的起点是 JsonToken#END_ARRAYJsonToken#END_OBJECT或 ,或者 JsonToken#FIELD_NAME 如果非类型化对象是深度嵌套的,则为 。

reset

public abstract JsonReader reset()

创建 JSON 流开头的新 JsonReader 重置。

使用 isResetSupported() 确定是否 JsonReader 可以重置 。 如果调用了重置,并且不支持 IllegalStateException 重置,则会引发 。

Returns:

JsonReader 重置为 JSON 流的开头。

Throws:

IOException

- 如果当前 JsonReader 不支持重置。

skipChildren

public abstract void skipChildren()

如果当前令牌为 START_ARRAYSTART_OBJECT,则递归跳过 JSON 令牌子流。

如果当前令牌不是数组或对象的开头,则此方法为 no-op。

Throws:

IOException

- 如果无法跳过子级。

适用于