Jackson 中的 JsonGenerator 类

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

所有用于写入 JSON 数据的公共 API 均由 JsonGenerator 类定义。因此,它是所有公共 API 的基类。我们使用 JsonFactory 类的工厂方法来创建 JsonGenerator 的实例。

com.fasterxml.jackson.core.JsonGenerator 类的 JsonGenerator 类声明如下

JsonGenerator 类的嵌套类

JsonGenerator.Feature 是一个枚举,它定义了所有可切换的生成器功能。

语法

JsonGenerator 类字段

protected PrettyPrinter _cfgPrettyPrinter

这是一个对象,用于在输出时处理美化打印。

JsonGenerator 类的构造函数

序号构造函数描述
1protected JsonGenerator()默认构造函数

这是一个对象,用于在输出时处理美化打印。

JsonGenerator 类的方法

序号方法描述
1protected void _reportError(String msg)这是一个辅助方法,用于使用指定的基消息构造并抛出 JsonGenerationException
2protected void _writeSimpleObject(Object value)用于调用适当的写入方法来给定未经类型化的对象。
3boolean canOmitFields() - 内省方法,用于检查是否可以省略写入对象字段。此方法用于检查是否可以省略写入对象字段。
4boolean canUseSchema(FormatSchema schema)用于检查给定的模式是否可以与当前生成器一起使用。
5boolean canWriteBinaryNatively()用于检查底层数据格式是否支持“原生”二进制数据。
6boolean canWriteObjectId()用于检查底层数据格式是否支持某种形式的对象 ID。
7boolean canWriteTypeId()用于检查底层数据格式是否支持某种形式的类型 ID。
8abstract void close() - 调用此方法以关闭此生成器,以便不能再写入任何内容。用于关闭当前生成器以停止写入内容。
9JsonGenerator configure(JsonGenerator.Feature f, boolean state)用于禁用或启用给定功能。
10void copyCurrentEvent(JsonParser jp)为了复制给定解析器实例指向的当前事件的数据,我们使用此方法。
11void copyCurrentStructure(JsonParser jp)为了复制给定解析器实例指向的当前事件及其包含的后续事件的数据,我们使用此方法。
12abstract JsonGenerator disable(JsonGenerator.Feature f)用于禁用给定功能。
13abstract JsonGenerator enable(JsonGenerator.Feature f)用于启用给定的解析器功能。
14abstract void flush()该方法用于

1. 将任何缓冲数据刷新到底层目标。

2. 刷新目标本身。

15CharacterEscapes getCharacterEscapes()用于访问自定义转义符,JsonGenerators 在创建时使用这些转义符。
16abstract ObjectCodec getCodec()用于访问用于将 Java 对象写入 JSON 内容的对象。
17abstract int getFeatureMask()为了获取所有标准 JsonGenerator.Features 的状态,我们使用此批量访问方法。
18int getHighestEscapedChar()这是一个访问器方法,用于测试当前生成器配置的最高未转义字符。
19Object getOutputTarget()用于访问用作生成输出的目标的对象。
20PrettyPrinter getPrettyPrinter()这是一个访问器,用于检查当前生成器是否已配置了 PrettyPrinter。
21FormatSchema getSchema()用于访问当前解析器使用的模式(如果存在)。
22abstract boolean isClosed()用于确定当前生成器是否已关闭。
23abstract boolean isEnabled(JsonGenerator.Feature f)用于检查给定功能是否已启用。
24JsonGenerator setCharacterEscapes(CharacterEscapes esc)用于定义自定义转义符,JsonGenerators 在创建时使用这些转义符。
25abstract JsonGenerator setCodec(ObjectCodec oc)为了设置或重置用于将 Java 对象写入 JSON 内容的对象,我们使用此方法。
26abstract JsonGenerator setFeatureMask(int mask) - 用于(重新)设置所有标准 JsonGenerator.Features 状态的批量设置方法为了重置所有标准 JsonGenerator.Features 的状态,我们使用此批量设置方法。
27JsonGenerator setHighestNonEscapedChar(int charCode)为了转义指定代码点之上的所有字符代码,我们通过此方法请求生成器。
28JsonGenerator setPrettyPrinter(PrettyPrinter pp)用于设置自定义美化打印器,用于添加缩进以提高可读性。
29JsonGenerator setRootValueSeparator(SerializableString sep)它允许覆盖用于分隔根级别 JSON 值的字符串。
30void setSchema(FormatSchema schema)用于定义当前生成器将使用的模式。
31abstract JsonGenerator useDefaultPrettyPrinter()该方法用于启用使用默认美化打印器进行美化打印。
32abstract Version version()这是一个访问器,用于查找当前生成器实例提供的包的版本。
33void writeArrayFieldStart(String fieldName)用于输出具有 JSON 数组值的字段条目。它也用于输出 START_ARRAY 标记。
34abstract void writeBinary(Base64Variant b64variant, byte[] data, int offset, int len)用于将给定二进制数据块作为完整的字符串值输出,即用双引号括起来。
35abstract int writeBinary(Base64Variant b64variant, InputStream data, int dataLength)它类似于 writeBinary(Base64Variant,byte[],int,int),但它通过流接受输入。流允许我们进行增量写入,而无需将整个输入保存在内存中。
36void writeBinary(byte[] data)它类似于 writeBinary(Base64Variant,byte[],int,int),但假定默认使用 Jackson 的默认 Base64 变体,即 Base64Variants.MIME_NO_LINEFEEDS
37void writeBinary(byte[] data, int offset, int len)它类似于 writeBinary(Base64Variant,byte[],int,int),但默认使用 Jackson 的默认 Base64 变体,即 Base64Variants.MIME_NO_LINEFEEDS
38int writeBinary(InputStream data, int dataLength)它类似于 writeBinary(Base64Variant, InputStream, int),但假定默认使用 Jackson 的默认 Base64 变体,即 Base64Variants.MIME_NO_LINEFEEDS
39void writeBinaryField(String fieldName, byte[] data)用于输出具有指定 base64 编码数据的字段条目。
40abstract void writeBoolean(boolean state)用于输出字面量 JSON 布尔值。
41void writeBooleanField(String fieldName, boolean value)用于输出具有布尔值的字段条目。
42abstract void writeEndArray()用于写入
1. JSON 数组值的结束标记。
2. 如果启用了美化打印,它还可以写入可能的空白装饰。
43abstract void writeEndObject()用于写入
3. JSON 对象值的结束标记。
4. 如果启用了美化打印,它还可以写入可能的空白装饰。
44abstract void writeFieldName(SerializableString name)writeFieldName(String name) 相同,但它接受可序列化字符串而不是普通字符串。它可以执行得更好,因为一些处理可以被重用以供以后调用。
45abstract void writeFieldName(String name)用于写入字段名。该方法接受字段名作为字符串,即用双引号括起来。如果启用了美化打印,它可以带有空白装饰。
46abstract void writeNull()用于输出字面量 JSON null 值。
47void writeNullField(String fieldName)用于输出具有 JSON 字面量 null 值的字段。
48abstract void writeNumber(BigDecimal dec)用于将给定的 BigDecimal 值输出为 JSON 数字。
49abstract void writeNumber(BigInteger v)用于将给定的 BigInteger 值输出为 JSON 数字。
50abstract void writeNumber(double d)用于将给定的 double 值输出为 JSON 数字。
51abstract void writeNumber(float f)用于将给定的 float 值输出为 JSON 数字。
52abstract void writeNumber(int v)用于将给定的 int 值输出为 JSON 数字。
53abstract void writeNumber(long v)用于将给定的 long 值输出为 JSON 数字。
54void writeNumber(short v)用于将给定的 short 值输出为 JSON 数字。
55abstract void writeNumber(String encodedValue)用于输出无法轻松转换为标准 Java 数字类型的自定义数值类型。
56void writeNumberField(String fieldName, BigDecimal value)这是另一个重要的方法,用于输出具有指定数值的字段条目。
57void writeNumberField(String fieldName, double value)这是另一个重要的方法,用于输出具有指定数值的字段条目。
58void writeNumberField(String fieldName, float value)这是另一个重要的方法,用于输出具有指定数值的字段条目。
59void writeNumberField(String fieldName, int value)这是另一个重要的方法,用于输出具有指定数值的字段条目。
60void writeNumberField(String fieldName, long value)这是另一个重要的方法,用于输出具有指定数值的字段条目。
61abstract void writeObject(Object pojo) - 用于将给定的 Java 对象 (POJO) 写入 JSON 的方法。这是最重要的方法之一,用于将给定的 Java 对象写入 JSON。
62void writeObjectField(String fieldName, Object pojo)用于输出具有特定对象数据作为其值的字段条目。
63void writeObjectFieldStart(String fieldName)这是一个方便的方法,用于输出字段条目和 START_OBJECT 标记。
64void writeObjectId(Object id)可以调用此方法来输出所谓的原生对象 ID。
65void writeObjectRef(Object id) - 可以调用此方法来输出对原生对象 ID 的引用。此方法很少由开发者用于输出对原生对象 ID 的引用。
66abstract void writeRaw(char c)它允许生成器按原样复制输入文本,没有任何修改。修改包括不转义和不加分隔符。
67abstract void writeRaw(char[] text, int offset, int len)它允许生成器按原样复制输入文本,没有任何修改。修改包括不转义和不加分隔符。
68void writeRaw(SerializableString raw)它允许生成器按原样复制输入文本,没有任何修改。修改包括不转义和不加分隔符。
69abstract void writeRaw(String text)它允许生成器按原样复制输入文本,没有任何修改。修改包括不转义和不加分隔符。
70abstract void writeRaw(String text, int offset, int len) - 此方法将强制生成器按原样复制输入文本,没有任何修改(包括不进行转义,即使上下文 [数组、对象] 否则需要,也不会添加分隔符)。它允许生成器按原样复制输入文本,没有任何修改。修改包括不转义和不加分隔符。
71abstract void writeRawUTF8String(byte[] text, int offset, int length)此方法类似于 writeString(String) 方法;它接受 UTF-8 编码的字符串,而不是字符串,并且不进行额外转义。
72abstract void writeRawValue(String text)它允许生成器按原样复制输入文本,没有任何修改,但假定它必须构成一个合法的 JSON 值。
73abstract void writeRawValue(String text, int offset, int len)用于写入原始值。
74abstract void writeStartArray()该方法用于写入 JSON 数组值的起始标记。
75abstract void writeStartObject()这是另一个重要的方法,用于写入 JSON 对象值的起始标记。
76abstract void writeString(char[] text, int offset, int len)用于输出字符串值。
77abstract void writeString(SerializableString text)它类似于 writeString(String) 方法,但它接受 SerializableString 而不是 string
78abstract void writeString(String text) - 用于输出字符串值的方法。此方法用于输出字符串值。
79void writeStringField(String fieldName, String value这是一个方便的方法,用于输出具有字符串值的字段条目。
80void writeTypeId(Object id)writeTypeId() 可用于输出所谓的原生类型 ID。
81abstract void writeUTF8String(byte[] text, int offset, int length)它类似于 writeString(String) 方法,但它接受 UTF-8 编码的字符串作为输入。

给定的字符串没有使用数据格式所需的任何转义方案进行转义。

82abstract void writeTree(TreeNode rootNode)这是一个重要的方法,用于使用此生成器写入给定的 JSON 树。