我有一个特定类的反序列化器,它在读取字段时需要一些排序。假设我的班级 (field1
和field2
) 中有两个字段,为了阅读field2
,它首先需要field1
.
例如,对于以下 json 数据,它可以工作,因为当反序列化器解析时field2
,field1
已经设置了:
{"field1": 3, "field2": 4}
但是,如果我们反转字段:
{"field2": 4, "field1": 3}
我需要跳过field2
,jp.skipChildren
因为field1
没有设置。当field1
被解析时,杰克逊应该重新读取和解析field2
.
一种选择是解析 field2 而不是跳过并将其保存在一个变量中,以便在设置 field1 时,它可以使用在 field2 中保存数据的变量。然而; 基于 的值field1
,我可能不需要解析field2
,因此我正在寻找更好的解决方案,因为性能在这部分代码中至关重要。
我正在使用Mapper.readValue(byte[], MyClass.class)
方法,似乎杰克逊ReaderBasedJsonParser
用于解析。即使可以获得令牌位置,我也找不到设置令牌位置的方法。