gpt4 book ai didi

java - 使用 Jackson 解析 JSON 时限制 Map 值

转载 作者:行者123 更新时间:2023-11-30 04:36:17 24 4
gpt4 key购买 nike

我正在使用Jackson解析 JSON,其中字段之一是任意键和值的字典。这通常会直接映射到 Java Map<String, Object>难道我们只允许某些值类型( StringLongDoubleLong[]Double[] )。

当前我们完整解析文档,然后迭代每个映射的每个值并执行 instanceof检查它是否有效,无效时向用户返回错误。对于长文档来说,这当然是相当低效的,因为我们有很多这样的文档。

是否有人知道向 Jackson 表达此映射值类型限制的方法,以便在解析期间可以捕获输入中的任何错误? @JsonSubTypes注释看起来可能相关,但无法弄清楚在这种情况下如何应用它。

以下是我希望替换的代码类型的示例:

static class Doc {
List<Item> items;
}

static class Item {
/* ...other fields snipped... */
public Map<String, Object> payload;

@JsonIgnore
public void check() throws Exception {
for(Object value: item.payload.values()) {
if(value instanceof String) {
else if(value instanceof Long) { }
else if(value instanceof Long[]) { }
else if(value instanceof Double) { }
else if(value instanceof Double[]) { }
else { throw new Exception("Unsupported value type"); }
}
}
}

void read(InputStream stream) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Doc doc = mapper.readValue(stream, Doc.class);

// Check all payload types are valid
for(Item item: doc.items) {
item.check()
}
}

最佳答案

好吧,无法找到一种方法来使用 Jackson 提供的注释或类型系统来表达我想要的内容,所以我最终通过编写自定义反序列化器来完成我试图避免的事情。

诚然,这确实允许对允许的数据类型和解析错误进行更简洁的控制,但它比我希望的更详细!

关于java - 使用 Jackson 解析 JSON 时限制 Map 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com