Java 使用以整数为键的snakeyaml解析yaml文件

Java 使用以整数为键的snakeyaml解析yaml文件,java,yaml,snakeyaml,Java,Yaml,Snakeyaml,我试图解析一个我没有创建的yaml文件,一个我无法编辑的文件。文件的结构是 681: activities: copying: time: 480 manufacturing: materials: - quantity: 86 typeID: 38 products: - quantity: 1 typeID: 165 time: 600 research_mat

我试图解析一个我没有创建的yaml文件,一个我无法编辑的文件。文件的结构是

681:
  activities:
    copying:
      time: 480
    manufacturing:
      materials:
      - quantity: 86
        typeID: 38
      products:
      - quantity: 1
        typeID: 165
      time: 600
    research_material:
      time: 210
    research_time:
      time: 210
  blueprintTypeID: 681
  maxProductionLimit: 300
该文件的长度约为144000行,每行都遵循上述结构。我遇到的问题是,由于使用反射将其解析为POJO,因此结构中的第一个键(在本例中为
681:
)是一个整数。Java中的字段不能仅用数值命名,因此在进行解析时,会出现以下错误:

Exception in thread "main" Can't construct a java object for tag:yaml.org,2002:org.zephyrion.eve.assetmanager.Blueprint; exception=Cannot create property=682 for JavaBean=org.zephyrion.eve.assetmanager.Blueprint@2446bd09; No JavaBean properties found in org.zephyrion.eve.assetmanager.Blueprint
 in 'reader', line 1, column 1:
    681:
    ^

有没有办法防止snakeyaml将值解析为整数,而将其解析为字符串?我尝试过使用自定义解析器,并同时禁用整数解析,但仍然不起作用。

您尝试过该方法吗?你遇到了什么问题?是的,我试过教程。这是我调查的第一件事。我遇到的问题是doing
Yaml-Yaml=new-Yaml(new-Constructor(Foo.class))然后随后
yaml.loadAll(fileInputStream)
我得到一个
无法为tag构建java对象:yaml.org,2002:org.zephyrion.eve.assetmanager.Blueprint;exception=无法为JavaBean=org.zephyrion.eve.assetmanager创建属性=681。Blueprint@2446bd09; 在“reader”第1行第1列的org.zephyrion.eve.assetmanager.Blueprint中找不到JavaBean属性:681:
异常,因为第一个标记是整数,而不是字符串。我猜您想要一个不需要更改YAML文件的解决方案,是吗?(否则,您可以使用一些脚本将
681:
替换为
'681':
!!str 681:
)。是的,这是正确的。我的解决方案是创建一组静态工厂方法,并将每个部分分解为一个新对象。这不仅需要为自定义YAML文件修复,而且在OpenAPI YAML规范中,当您想要为RESTful请求指定返回值时,返回值不被引用。例如,在SwaggerHub上的OpenAPI 3规范中,返回代码sre 200:或404:。它们不是“200”:或“400”:任何为OpenAPI创建YAML的人都需要解决这个问题——除非你想让做OpenAPI的人改变规范。。。