Jackson 中的 JsonParser 类

2024年8月28日 | 阅读 8 分钟

用于读取 JSON 数据的所有公共 API 都由 JsonParser 类定义。因此,它是所有这些公共 API 的基类。我们使用 JsonFactory 类的工厂方法来创建 JsonParser 实例。

JsonParser 类对于 com.fasterxml.jackson.core.JsonParser 类的声明如下:

JsonParser 类的嵌套类

JsonParser 类有两个嵌套类:

  • 特点
  • NumberTypes

JsonParser.Feature 是一个枚举,它定义了所有可切换的解析器功能。

语法

JsonParser.NumberType 也是一个枚举,表示数字的可能原生类型。

语法

字段

protected int _features

这是一个位标志,即由指示哪些 JsonParser.Features 已启用的位组成。

JsonParser 类的构造函数

序号名称描述
1.protected JsonParser()使用默认功能创建 JsonParser 实例。
2.protected JsonParser(int features)使用给定的功能创建 JsonParser 实例。

JsonParser 的方法

序号方法描述
1protected JsonParseException _constructError(String msg)这是一个辅助方法,用于构造 JsonParserException。该异常基于解析器的当前状态。
2protected void _reportUnsupportedOperation()这是另一个辅助方法,用于解析器实现支持的操作。
3boolean canReadObjectId()这是另一个有用的方法,用于检查底层数据格式是否本机支持某种对象 ID。
4boolean canReadTypeId()用于检查底层数据格式是否本机支持某种类型 ID。
5boolean canUseSchema(FormatSchema schema)用于检查当前解析器是否可以使用指定的模式。
6abstract void clearCurrentToken()用于“消耗”当前令牌,通过有效地移除它。移除令牌后,hasCurrentToken() 和 getCurrentToken() 方法将分别返回 false 和 null。
7abstract void close()用于关闭解析器以停止进一步的迭代和数据访问。

如果解析器拥有输入源或启用了 AUTO_CLOSE_SOURCE 功能,它还将关闭底层输入源。
8JsonParser configure(JsonParser.Feature f, boolean state)用于启用或禁用给定的 JsonParser 功能。
9JsonParser disable(JsonParser.Feature f)用于禁用给定的 JsonParser 功能。
10JsonParser enable(JsonParser.Feature f)用于启用给定的 JsonParser 功能。
11abstract BigInteger getBigIntegerValue()这是一个数字访问器,在令牌类型为 JsonToken.VALUE_NUMBER_INT 时使用,由于其大小而不能用作 Java long 基本类型。
12byte[] getBinaryValue()这是 getBinaryValue(Base64Variant) 的替代方法,它默认使用 Base64Variants.getDefaultVariant() 作为默认编码。
13abstract byte[] getBinaryValue(Base64Variant b64variant)这是一个重要的方法,用于读取当前文本 JSON 值中包含的 base64 编码的二进制数据。
14boolean getBooleanValue()这是一个访问器,用于访问 JsonToken.VALUE_TRUE 和 JsonToken.VALUE_FALSE 的值。
15byte getByteValue()这是一个数字访问器,用于访问 JsonToken.VALUE_NUMBER_INT 令牌的值,即表示为 Java byte 基本类型的值。
16abstract ObjectCodec getCodec()这是一个访问器,用于访问与当前解析器关联的 ObjectCodec 的值。
17abstract JsonLocation getCurrentLocation()用于获取处理过的字符的位置,该位置将用于错误报告。
18abstract String getCurrentName()用于获取与当前令牌关联的名称。
19abstract JsonToken getCurrentToken()该方法用于获取光标指向的令牌。如果没有令牌,则返回 null。
20abstract int getCurrentTokenId()这与 getCurrentToken() 方法类似。getCureentTokenId()getCurrentToke() 之间的唯一区别是,getCureentTokenId() 返回一个 int,而 getCurrentToken() 返回 JsonToken。
21abstract BigDecimal getDecimalValue()这是一个访问器,用于访问 JsonToken.VALUE_NUMBER_FLOAT 或 JsonToken.VALUE_NUMBER_INT 令牌的值。
22abstract double getDoubleValue()这是一个访问器,用于访问 JsonToken.VALUE_NUMBER_FLOAT 令牌的值,表示为 Java double 基本类型。
23abstract Object getEmbeddedObject()这是一个访问器,用于访问 JsonToken.VALUE_EMBEDDED_OBJECT 令牌的值。
24int getFeatureMask()为了获取所有标准 JsonParser.Features 的状态,我们使用此批量访问方法。
25abstract float getFloatValue()这是一个访问器,用于访问 JsonToken.VALUE_NUMBER_FLOAT 令牌的值,表示为 Java float 基本类型。
26Object getInputSource()用于获取用于访问正在解析的输入的对象的访问权限。
27abstract int getIntValue()这是一个访问器,用于访问 JsonToken.VALUE_NUMBER_ INT 令牌的值,表示为 Java int 基本类型。
28abstract JsonToken getLastClearedToken()使用 clearCurrentToken() 清除的最后一个令牌,我们使用此方法获取它。
29abstract long getLongValue()这是一个数字访问器,用于访问 JsonToken.VALUE_NUMBER_ INT 令牌的值,表示为 Java long 基本类型。
30abstract JsonParser.NumberType getNumberType()当令牌类型为 JsonToken.VALUE_NUMBER_INT 或 JsonToken.VALUE_NUMBER_FLOAT 时,该方法返回 JsonParser.NumberType 常量之一。
31abstract Number getNumberValue()用于访问所有种类的数值。因此,这是一个通用的数字值访问器方法。
32Object getObjectId()该方法首先检查当前令牌是否具有关联的对象 ID。如果为 true,则返回 ID。
33abstract JsonStreamContext getParsingContext()用于访问读取器所在的当前解析上下文。
34FormatSchema getSchema()如果当前解析器使用了任何模式,则该方法用于访问它。
35short getShortValue()这也是一个数字访问器,用于访问 JsonToken.VALUE_NUMBER_ INT 令牌的值,表示为 Java short 基本类型。
36abstract String getText()用于访问当前令牌的文本表示。如果没有当前令牌,则返回 null。
37abstract char[] getTextCharacters()这与 getText() 方法类似,但它返回一个底层(不可修改)字符数组,其中包含文本值,而不是构造一个 String 对象来包含此信息。
38abstract int getTextLength()用于获取存储在返回缓冲区中的 String 的长度。这是一个与 getTextCharacters() 方法一起使用的访问器方法。
39abstract int getTextOffset()用于获取缓冲区中第一个文本内容字符的偏移量。这是一个与 getTextCharacters() 方法一起使用的访问器方法。
40abstract JsonLocation getTokenLocation()用于获取当前令牌的起始位置。起始位置表示输入中开始当前令牌的第一个字符的位置。
41Object getTypeId()该方法首先检查当前令牌是否具有关联的类型 ID。如果为 true,则返回它。
42boolean getValueAsBoolean()用于将当前令牌的值转换为 Boolean。
43boolean getValueAsBoolean(boolean defaultValue)用于将当前令牌的值转换为 Boolean。
44double getValueAsDouble()用于将当前令牌的值转换为 Java double。
45double getValueAsDouble(double defaultValue)用于将当前令牌的值转换为 Java double。
46int getValueAsInt()用于将当前令牌的值转换为 Java int。
47int getValueAsInt(int defaultValue)用于将当前令牌的值转换为 Java int。
48long getValueAsLong()用于将当前令牌的值转换为 long。
49long getValueAsLong(long defaultValue)用于将当前令牌的值转换为 long。
50String getValueAsString()用于将当前令牌的值转换为 Java String。
51abstract String getValueAsString(String defaultValue)用于将当前令牌的值转换为 Java String。
52abstract boolean hasCurrentToken()用于检查解析器当前是否指向一个令牌。
53abstract boolean hasTextCharacters()它返回一个布尔值,定义了调用 getTextCharacters() 是否是访问当前解析器指向的事件的文本内容的最有效方式。
54abstract boolean isClosed()用于检查当前解析器是否已关闭。
55boolean isEnabled(JsonParser.Feature f)用于检查给定的 JsonParser.Feature 是否已启用。
56boolean isExpectedStartArrayToken()这是一个专门的访问器方法,用于在预期数组时验证当前令牌是否表示数组的开始。
57Boolean nextBooleanValue()该方法首先获取下一个令牌,如果令牌是 JsonToken.VALUE_TRUE 或 JsonToken.VALUE_FALSE,它将返回一个 Boolean 值;否则返回 null。
58boolean nextFieldName(SerializableString str)该方法首先获取下一个令牌,如果令牌是具有指定名称的 JsonToken.FIELD_NAME,它将返回一个布尔值。
59int nextIntValue(int defaultValue)该方法首先获取下一个令牌,如果令牌是 JsonToken.VALUE_NUMBER_INT,它将返回一个 32 位 int 值;否则,它将返回指定的默认值。
60long nextLongValue(long defaultValue)该方法首先获取下一个令牌,如果令牌是 JsonToken.VALUE_NUMBER_INT,它将返回一个 64 位 long 值;否则,它将返回指定的默认值。
61String nextTextValue()该方法首先获取下一个令牌,如果令牌是 JsonToken.VALUE_ STRING,它将返回包含的字符串值;否则,它将返回 null。
62abstract void overrideCurrentName(String name)用于更改当前(字段)名称。
63int readBinaryValue(Base64Variant b64variant, OutputStream out)这是 readBinaryValue(OutputStream) 的替代方法。唯一的区别是它允许显式指定要使用的 base64 变体。
64int readBinaryValue(OutputStream out)这是 getBigIntegerValue() 的替代方法,当我们处理大值时使用。
65<T> T readValueAs(Class<T> valueType)用于将 JSON 数据反序列化为非容器类型,它可以是 bean、包装器或数组。
66<T> T readValueAs(TypeReference<?> valueTypeRef)用于将 JSON 数据反序列化为 Java 类型,其引用作为参数传递。
67<T extends TreeNode> T readValueAsTree()用于将 JSON 内容反序列化为等效的树模型。树模型将由结果模型的根 TreeNode 表示。
68<T> Iterator<T> readValuesAs(Class<T> valueType)用于从解析器流中读取一系列对象(指定相同的类型)。
69<T> Iterator<T> readValuesAs(TypeReference<?> valueTypeRef)用于从解析器流中读取一系列对象(指定相同的类型)。
70int releaseBuffered(OutputStream out)用于将解析器尚未消耗但已被读取的数据推回。
71int releaseBuffered(Writer w)也用于将解析器尚未消耗但已被读取的数据推回。
72abstract void setCodec(ObjectCodec c)这是一个 setter 方法,允许定义与此解析器关联的 ObjectCodec(如果有)。
73JsonParser setFeatureMask(int mask)当我们想重置所有标准 JsonParser.Features 的状态时,我们使用此批量设置方法。
74void setSchema(FormatSchema schema)此方法强制当前解析器使用给定的模式。
75abstract JsonParser skipChildren()如果流指向 JsonToken.START_OBJECT 或 JsonToken.START_ARRAY;则该方法会跳过对象令牌或当前解析器指向的数组的所有子令牌。
76abstract Version version()这是一个访问器,用于获取核心包的版本。

下一主题Jackson vs. Gson