我正在解析一个非常简单的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检索数组?
最佳答案
问题在于您的YAML文件中的值不是(全部)字符串。即看起来像
accepted_groups:
- A
- B
不
accepted_groups: "[A, B]"
因此,
LinkedHashMap<String, String>
只是使用错误的类型。正确的类型是什么,不知道就不能说:
Yaml
类(不是Kotlin标准库,也不是您在标签中提到的Spring Boot)。 LinkedHashMap<String, Any>
可能会起作用,但不是最佳选择。So how does println manage to print the object?
通过调用
toString
,就像对任何对象一样。问题所在
val group = obj.get("accepted_groups")
是通过使用
LinkedHashMap<String, String>
推断的group
类型是String
,但实际存储的值不是。
关于spring-boot - Kotlin从LinkedHashMap <String,String>转换为String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59405080/