【问题标题】:Reading from a YAML file in Kotlin在 Kotlin 中读取 YAML 文件
【发布时间】:2022-08-02 18:23:42
【问题描述】:

我很难弄清楚如何在 Kotlin 中读取 YAML 文件。

简而言之,YAML 具有以下格式:

aws:
  foo:
    dev:
      id: \'1111\'
    pro:
      id: \'2222\'
  bar:
    dev:
      id: \'3333\'
    pro:
      id: \'4444\'

我创建了这些数据类:

data class Account (
        val id: String
)

data class Owner (
        val accounts: List<Account>
)

data class Cloud (
        val owners: List<Owner>
)

然后我尝试解析文件:

val mapper = ObjectMapper().registerModule(KotlinModule())
val settings: Cloud = mapper.readValue(Path.of(\"accounts.yaml\").toFile())
# also tried this
val settings: List<Cloud> = mapper.readValue(Path.of(\"accounts.yaml\").toFile())
println(settings)

printlnException in thread \"main\" com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'aws\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\') 失败

为什么?

  • YAML 和 JSON 不一样
  • @IvoBeckers 当然不是。刚刚修复了问题文本中不正确的 val mapper

标签: java kotlin jackson


【解决方案1】:

您需要包含 jackson-dataformat-yaml 依赖项,然后像这样创建您的 ObjectMapper:

val mapper = ObjectMapper(YAMLFactory()).registerModule(KotlinModule())

【讨论】:

    【解决方案2】:

    另一种方法是使用Kaml

    将以下依赖项添加到您的 build.gradle.kts

    implementation("com.charleskorn.kaml:kaml:0.46.0")
    

    然后您可以将其解析为 YAML 节点:

    val yaml = Yaml.default.parseToYamlNode(Path.of("accounts.yaml").toFile().readText())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2022-12-05
      • 2019-01-24
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多