Scala, PureConfig - 如何读取json配置文件?

3

我有一个简单的config.json文件在我的资源中:

{
  "configs": [
    {
      "someConfig": {
        "name": "my_name",
        "filters": {
          "name": "new"
        },
        "id": "some-config-id",
        "fixes": {
          "isFixed": true
        }
      }
    }
  ]
}

我还为给定的字段创建了case类

final case class Configs(configs: List[SomeConfig])

  final case class SomeConfig(name: String,
                              filters: Filters,
                              id: String,
                              fixes: Fixes)

  final case class Filters(name: String)

  final case class Fixes(isFixed: Boolean)

现在我想使用 PureConfig 读取这个配置文件:

val configs: Configs = ConfigSource.resources("configs.json").loadOrThrow[Configs]

但是我遇到了错误:

Exception in thread "main" pureconfig.error.ConfigReaderException: Cannot convert configuration to Configs. Failures are:
- Key not found: 'name'.
- Key not found: 'filters'.
- Key not found: 'id'.
- Key not found: 'fixes'

我已经添加了ProductHint:
 implicit def hint[A] = ProductHint[A](ConfigFieldMapping(CamelCase, CamelCase))

但是这并没有帮助。 我该如何修复它以从json文件中读取配置?

1个回答

3
你的案例类与JSON不匹配。应该更像这样:
{
  "configs": [
    {
      "name": "my_name",
      "filters": {
        "name": "new"
      },
      "id": "some-config-id",
      "fixes": {
        "isFixed": true
      }
    }     
  ]
}

注意缺少"someConfig": { ... }作为配置对象的包装器。相反,您应该有:

final case class Configs(configs: List[SomeConfigWrapper])

final case class SomeConfigWrapper(someConfig: SomeConfig)

...

因为在JSON中,"configs"对象内部没有直接包含namefiltersidfixes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接