Java 如何解析YAML文件
我正在使用Jackson的YAML解析器,我希望解析YAML文件,而不必手动创建与YAML文件匹配的Java类。我能找到的所有示例都将其映射到如下对象:Java 如何解析YAML文件,java,jackson,yaml,Java,Jackson,Yaml,我正在使用Jackson的YAML解析器,我希望解析YAML文件,而不必手动创建与YAML文件匹配的Java类。我能找到的所有示例都将其映射到如下对象: 提供给我的yaml文件并不总是相同的,因此我需要在运行时对其进行解析,使用jackson yaml可以实现这一点吗?就像解析JSON一样,可以解析为映射: 范例 ObjectMapper-mapper=newobjectmapper(newyamlfactory()); @抑制警告(“未选中”) Map Map=mapper.readValue
提供给我的yaml文件并不总是相同的,因此我需要在运行时对其进行解析,使用jackson yaml可以实现这一点吗?就像解析JSON一样,可以解析为
映射:
范例
ObjectMapper-mapper=newobjectmapper(newyamlfactory());
@抑制警告(“未选中”)
Map Map=mapper.readValue(新文件(“test.yaml”)、Map.class);
系统输出打印项次(map);
test.yaml
订单号:A001
日期:2019-04-17
顾客姓名:顾客,乔
订单行:
-项目:9号链轮
数量:12
售价:1.23
-项目:小部件(10毫米)
数量:4
售价:3.45
输出
{orderNo=A001,date=2019-04-17,customerName=Customer,Joe,orderLines=[{item=No.9链轮,数量=12,单价=1.23},{item=Widget(10mm),数量=4,单价=3.45}]
如果您不知道确切的格式,则必须将数据解析到树中并手动处理,这可能会很繁琐。我会使用可选的映射和过滤
例如:
public static final String YAML = "invoice: 34843\n"
+ "date : 2001-01-23\n"
+ "product:\n"
+ " - sku : BL394D\n"
+ " quantity : 4\n"
+ " description : Basketball\n"
+ " price : 450.00\n"
+ " - sku : BL4438H\n"
+ " quantity : 1\n"
+ " description : Super Hoop\n"
+ " price : 2392.00\n"
+ "tax : 251.42\n"
+ "total: 4443.52\n";
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
JsonNode jsonNode = objectMapper.readTree(YAML);
Optional.of(jsonNode)
.map(j -> j.get("product"))
.filter(ArrayNode.class::isInstance)
.map(ArrayNode.class::cast)
.ifPresent(projectArray -> projectArray.forEach(System.out::println));
}
输出:
{"sku":"BL394D","quantity":4,"description":"Basketball","price":450.0}
{"sku":"BL4438H","quantity":1,"description":"Super Hoop","price":2392.0}
如果您不想将其解析为Java类,您希望将其解析为什么?您的意思是在运行时可能会传递不同的文件,并且无法在源代码中硬编码文件路径?