Scala、PureConfig - 如何读取 json 配置文件?
Scala, PureConfig - how to read json config file?
我的资源中有一个简单的 config.json
文件:
{
"configs": [
{
"someConfig": {
"name": "my_name",
"filters": {
"name": "new"
},
"id": "some-config-id",
"fixes": {
"isFixed": true
}
}
}
]
}
我还为给定字段创建了 case classes
:
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
文件读取配置?
您的案例 类 不匹配 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"
对象中没有 name
、filters
、id
和 fixes
。
我的资源中有一个简单的 config.json
文件:
{
"configs": [
{
"someConfig": {
"name": "my_name",
"filters": {
"name": "new"
},
"id": "some-config-id",
"fixes": {
"isFixed": true
}
}
}
]
}
我还为给定字段创建了 case classes
:
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
文件读取配置?
您的案例 类 不匹配 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"
对象中没有 name
、filters
、id
和 fixes
。