首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CSV映射中将't'/'f‘解析为布尔值

在CSV映射中将't'/'f‘解析为布尔值
EN

Stack Overflow用户
提问于 2017-12-29 13:38:35
回答 1查看 763关注 0票数 3

假设我有这样的CSV:

代码语言:javascript
复制
name,city,active
abc,bcde,t
xyz,ghj,f

如果我想将它映射到一个模型,我将如何将't''f'转换为正确的布尔值。我正在使用jackson-dataformat-csv映射来完成这个任务。

代码语言:javascript
复制
CsvSchema csvSchema = CsvSchema.emptySchema().withHeader().withNullValue("");
CsvMapper csvMapper = new CsvMapper();
csvMapper.setPropertyNamingStrategy(SNAKE_CASE);
csvMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MappingIterator<Article> iterator = csvMapper.readerWithTypedSchemaFor(Object.class).with(csvSchema).readValues(fileFromResponse);
List<Object> data = iterator.readAll();

当前,此错误消息导致映射失败:

代码语言:javascript
复制
Cannot deserialize value of type `java.lang.Boolean` from String "t": only "true" or "false" recognized

我是否可以在模式中指定“t”或“f”应视为布尔值。或者还有其他方法可以反序列化它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-27 10:44:21

您可以使用布尔类型的映射器注册自定义JacksonModule:

代码语言:javascript
复制
private val YNToBooleanDeserializer = object : JsonDeserializer<Boolean>() {
    override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Boolean {
        return p.readValueAs(String::class.java) == "t"
    }
}

若要注册,请使用:

代码语言:javascript
复制
csvObjectMapper.registerModule(SimpleModule().addDeserializer(Boolean::class.java, YNToBooleanDeserializer))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48023491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档