Java 是否可以将CSV行解析为具有正确值类型的JsonNodes
很容易将csv解析为Java 是否可以将CSV行解析为具有正确值类型的JsonNodes,java,csv,jackson,jackson-dataformat-csv,Java,Csv,Jackson,Jackson Dataformat Csv,很容易将csv解析为列表,如中所述 然而,类型推断必须手动完成。例如,喜欢我在下面尝试做的事情?对我来说,使用Boolean.parseBooleanetc感觉像是膨胀,因为jackson做得很好 CsvSchema schema = CsvSchema.emptySchema().withHeader(); CsvMapper mapper = new CsvMapper(); ObjectReader with = mapper.readerFor(ArrayNode.class).wit
列表
,如中所述
然而,类型推断必须手动完成。例如,喜欢我在下面尝试做的事情?对我来说,使用Boolean.parseBoolean
etc感觉像是膨胀,因为jackson做得很好
CsvSchema schema = CsvSchema.emptySchema().withHeader();
CsvMapper mapper = new CsvMapper();
ObjectReader with = mapper.readerFor(ArrayNode.class).with(schema);
mapper.enable(CsvParser.Feature.WRAP_AS_ARRAY);
JsonNode readTree = with.readTree(new FileInputStream(file));
JsonNode jsonNode = arrayNode.get(0);
if (jsonNode.isObject()) {
Iterator<Entry<String, JsonNode>> fields = jsonNode.fields();
int counter = 0;
while (fields.hasNext()) {
Entry<String, JsonNode> entry = fields.next();
JsonNode value = entry.getValue();
if (value.isBoolean()) {
// nah
} else if (value.isNumber()) {
// yeah
} else if (value.isTextual()) {
// nah
}
}
}
CsvSchema schema=CsvSchema.emptySchema().withHeader();
CsvMapper映射器=新的CsvMapper();
ObjectReader with=mapper.reader for(ArrayNode.class).with(schema);
enable(CsvParser.Feature.WRAP_为_数组);
JsonNode readTree=with.readTree(新文件输入流(文件));
JsonNode JsonNode=arrayNode.get(0);
if(jsonNode.isObject()){
迭代器字段=jsonNode.fields();
int计数器=0;
while(fields.hasNext()){
Entry=fields.next();
JsonNode value=entry.getValue();
if(value.isBoolean()){
//不
}else if(value.isNumber()){
//嗯
}else if(value.isTextual()){
//不
}
}
}
是否可以将CSV行解析为具有正确值类型的JsonNodes,而不依赖POJO来提供它们?有两种方法可以阅读您的问题 理论上是否可以将CSV行解析为具有正确值类型的JsonNodes 答案是肯定的。例如:
- 您可以从头开始编写自己的CSV解析器,该解析器发出
对象JsonNode
- 您可以从现有的CSV解析器中获取
,应用一些启发式1将其转换为相应的列表
结构(无论是什么)JsonNode
但是从字里行间看,我怀疑您使用的是
JsonNode
,因为它是一种表示松散类型信息的方便方式。但是字符串也可以工作(与纯表示法一样),并且可以使用简单的自定义实用程序或包装器类实现到(更多)类型表示法的转换
1-这里存在一个问题。CSV本质上是无类型的,所以您需要使用启发式来告诉您值是布尔值、整数、浮点数还是字符串。但是转换是不明确的,CSV文件中的行可能不一致。因此,如果没有CSV文件的“模式”,那么到
JsonNode
对象的转换可能不可靠
2-在这两种情况下,这将违反(SoC)设计原则。这并不意味着这样的API总是错误的。有时出于实用的原因,在特定情况下忽略设计原则是合适的。但是,这样的设计不是通用的。有两种方法可以阅读您的问题 理论上是否可以将CSV行解析为具有正确值类型的JsonNodes 答案是肯定的。例如:
- 您可以从头开始编写自己的CSV解析器,该解析器发出
对象JsonNode
- 您可以从现有的CSV解析器中获取
,应用一些启发式1将其转换为相应的列表
结构(无论是什么)JsonNode
但是从字里行间看,我怀疑您使用的是
JsonNode
,因为它是一种表示松散类型信息的方便方式。但是字符串也可以工作(与纯表示法一样),并且可以使用简单的自定义实用程序或包装器类实现到(更多)类型表示法的转换
1-这里存在一个问题。CSV本质上是无类型的,所以您需要使用启发式来告诉您值是布尔值、整数、浮点数还是字符串。但是转换是不明确的,CSV文件中的行可能不一致。因此,如果没有CSV文件的“模式”,那么到
JsonNode
对象的转换可能不可靠
2-在这两种情况下,这将违反(SoC)设计原则。这并不意味着这样的API总是错误的。有时出于实用的原因,在特定情况下忽略设计原则是合适的。但是,这样的设计不是通用的。感谢您在字里行间的阅读和解释。感谢您在字里行间的阅读和解释。