Java 树映射的自定义反序列化程序-无法通过JsonParser获取全文
我有一个定义如下的类:Java 树映射的自定义反序列化程序-无法通过JsonParser获取全文,java,jackson,json-deserialization,Java,Jackson,Json Deserialization,我有一个定义如下的类: class Rule { private final TreeMap<String, String> rule; public Rule(TreeMap<String, String> rule) { this.rule = rule; } } 当我尝试用以下结构解析BigClass类型的Json时: { ... "rules": [ {
class Rule {
private final TreeMap<String, String> rule;
public Rule(TreeMap<String, String> rule) {
this.rule = rule;
}
}
当我尝试用以下结构解析BigClass
类型的Json时:
{
...
"rules": [
{
"A": "B",
"C": "D",
"E": "F"
}
]
}
。。。在我自己的反序列化()
方法中正确地调用了我,但问题是表达式p.getText()
只返回我{
(第一个标记),因此反序列化失败
我试着把所有的东西放在同一条线上(没有回车),但我也有同样的问题。
这看起来很明显,很简单,但我在网上和杰克逊的文档中都找不到任何例子。
请提供任何建议或参考以供分享?更改您的反序列化方法,如下所示: 在反序列化步骤中,您阅读了整个
JsonNode
,并基于在节点中找到的键值构建了自己的TreeMap
。(您可能需要向规则类添加构造函数)
@覆盖
公共规则反序列化(JSONP,反序列化上下文ctxt)引发IOException{
JsonNode node=p.getCodec().readTree(p);
TreeMap ruleMap=newtreemap();
node.fields().forEachRemaining(e->ruleMap.put(e.getKey(),e.getValue().textValue());
返回新规则(ruleMap);
}
public static final class Deserializer extends JsonDeserializer<Rule> {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public Rule deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String strRule = p.getText();
TypeReference<TreeMap<String, String>> typeReference = new TypeReference<>() {
};
TreeMap<String, String> ruleMap = objectMapper.readValue(strRule, typeReference);
return new Rule(ruleMap);
}
}
{
...
"rules": [
{
"A": "B",
"C": "D",
"E": "F"
}
]
}
@Override
public Rule deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
JsonNode node = p.getCodec().readTree(p);
TreeMap<String, String> ruleMap = new TreeMap<>();
node.fields().forEachRemaining(e -> ruleMap.put(e.getKey(), e.getValue().textValue()));
return new Rule(ruleMap);
}