我正在将使用 PyYaml 创建的 Yaml 传递给 SnakeYaml,而 SnakeYaml 似乎无法识别第一行之外的任何内容!存在并声明了 python/object。我已经在 Java 中设置了相同的对象。是否有一个示例将 loadAll 显示到断言或分配对象类型的对象数组中?
好电话...当我最初发布时,它远离计算机。
以下是我尝试使用 SnakeYaml 进入 Java 应用程序的 PyYaml 数据:
--- !!python/object:dbmethods.Project.Project {dblogin: kirtstrim7900, dbname: 92218kirtstrim_wfrogls,dbpw: 1234567895#froggy, preference1: '', preference2: '', preference3: '', projName: CheckPoint Firewall Audit - imp, projNo: 1295789430544+CheckPoint Firewall Audit - imp, projectowner: kirtcathey@sysrisk.com,result1label: Evidence, result2label: Recommend, result3label: Report, resultlabel: Response,role: owner, workstep1label: Objective, workstep2label: Policy, workstep3label: Guidance,worksteplabel: Procedure}
不仅仅是上面的一个实例,而是几个对象,所以需要在 SnakeYaml 中使用 loadAll .... 除非有人知道得更好。
至于代码,这是我从 SnakeYaml 文档中获得的全部内容:
for (Object data : yaml.loadAll(sb.toString())) {
System.out.println(data.toString());
}
然后,抛出此错误:
Exception in thread "AWT-EventQueue-0" Can't construct a java object for tag:yaml.org,2002:java/object: ......
Caused by: org.yaml.snakeyaml.error.YAMLException: Class not found: ......
正如您从小代码片段中看到的那样,即使没有提供所有这些信息,任何知道如何任意投射对象的答案的人都可能会回答这个问题。
谢谢。
解析每个条目开头的两个感叹号(!!),现在我得到:在“”,第 1 行,第 73 列中不允许映射值:
作为一个错误。使用 YAML 的全部目的是减少与解析相关的编码。如果出于某种原因我不得不转身解析传入和传出的代码,那么 YAML 很糟糕!并且很乐意恢复 XML 或任何其他允许 python 中间件与 java 应用程序通信的东西。