我正在解析一个非常简单的YAML文件。
这是我的代码:
val yaml = Yaml()
val inputStream: InputStream = FileInputStream("permissions.yml")
val obj = yaml.load<LinkedHashMap<String, String>>(inputStream)
println(obj.get("accepted_groups")) // prints [A, B]
val group = obj.get("accepted_groups") // crashes
错误是java.lang.ClassCastException:无法将类java.util.ArrayList强制转换为类java.lang.String 那么println如何管理打印对象?如何从此LinkedHashMap检索数组?
答案 0 :(得分:1)
问题是您的YAML文件中的值不是(所有)字符串。即看起来像
accepted_groups:
- A
- B
不是
accepted_groups: "[A, B]"
因此LinkedHashMap<String, String>
只是使用错误的类型。
正确的类型是什么,不知道就不能说:
文件的实际结构;
哪个库Yaml
类来自(不是Kotlin标准库,也不是您在标签中提到的Spring Boot)。
LinkedHashMap<String, Any>
可能会起作用,但不是最佳选择。
那么println如何管理打印对象?
通过调用toString
,就像对任何对象一样。
问题
val group = obj.get("accepted_groups")
是通过使用LinkedHashMap<String, String>
为group
推断的类型为String
,但实际存储的值不是。