我想从HOCON(Typesafe配置)文件中读取以下配置到Kotlin.
tablename: {
columns: [
{ item: { type: integer, key: true, null: false } }
{ desc: { type: varchar, length: 64 } }
{ quantity: { type: integer, null: false } }
{ price: { type: decimal, precision: 14, scale: 3 } }
]
}
Run Code Online (Sandbox Code Playgroud)
实际上我想提取关键列.到目前为止,我已尝试过以下内容.
val metadata = ConfigFactory.parseFile(metafile)
val keys = metadata.getObjectList("${tablename.toLowerCase()}.columns")
.filter { it.unwrapped().values.first().get("key") == true }
Run Code Online (Sandbox Code Playgroud)
但它失败并出现以下错误.
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@kotlin.internal.InlineOnly public operator …Run Code Online (Sandbox Code Playgroud) 在application.conf,如何使用环境变量来设置值,如果所述环境变量为空,则使用默认值?
我的 Web 服务之一返回 Java 字符串下方:
[
{
id=5d93532e77490b00013d8862,
app=null,
manufacturer=pearsonEducation,
bookUid=bookIsbn,
model=2019,
firmware=[1.0],
bookName=devotional,
accountLinking=mandatory
}
]
Run Code Online (Sandbox Code Playgroud)
我有上述字符串的等效 Java 对象。我想将上述 java 字符串类型转换或转换为 Java 对象。
我无法对它进行类型转换,因为它是一个字符串,而不是一个对象。所以,我试图将 Java 字符串转换为 JSON 字符串,然后我可以将该字符串写入 Java 对象,但没有运气出现invalid character "="异常。
您可以更改 Web 服务以返回 JSON 吗?
那是不可能的。他们没有改变他们的合同。如果他们返回 JSON,那就太容易了。
有没有办法动态更改Typesafe 配置文件的字段,使用源代码填充占位符?
例如,假设以下简单配置语句
{
values {
string1: ${name1}
string2: ${name2}
string3: ${name3}
string4: ${name4}
}
}
Run Code Online (Sandbox Code Playgroud)
正如HOCON文档中讨论的以及早期 StackOverflow 问题中提到的,可以使用环境变量和系统属性来实现这一目标。
是否也可以直接从程序中执行相同的操作?例如,在 中Java,有一个Constants类似的类
public class Constants
{
public static final String name1 = "A";
public static final String name2 = "B";
public static final String name3 = "C";
public static final String name4 = "D";
}
Run Code Online (Sandbox Code Playgroud)
并填充该类的配置字段?
HOCON允许Java在配置文件中集成和执行代码,但显然无法从集成Java代码中设置配置占位符。
我有一些数据可用作 HOCON 格式的类型安全配置文件。
有一个像这样的基本文件:
"data":{
"k1":{
"values": ["v1", "v2"]
},
"k2":{
"values": ["x1"]
},
"k3":{
"values": ["z1"]
}
}
Run Code Online (Sandbox Code Playgroud)
可能有一个文件可用于进行一些更改,例如在测试期间,如下所示:
"data":{
"k1":{
"values": ["v9"]
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用合并这两个文件
fileConfig.withFallback(baseFileConfig)
最终结果是:
"data":{
"k1":{
"values": ["v9"] // desired ["v1","v2","v9"]
},
"k2":{
"values": ["x1"]
},
"k3":{
"values": ["z1"]
}
}
Run Code Online (Sandbox Code Playgroud)
即,忽略后备配置中“k1”的数组值。有没有办法在合并后从两个文件中获取连接数组?
我有一个这样的 HOCON 配置:
[
{
name = 1
url = "http://example.com"
},
{
name = 2
url = "http://example2.com"
},
{
name = 3
url = {
A = "http://example3.com"
B = "http://example4.com"
}
}
]
Run Code Online (Sandbox Code Playgroud)
我想用 pureconfig 解析它。我如何表示 URL 可以是字符串或多个 URL 的映射,每个 URL 都有一个键?
我试过这个:
import pureconfig.ConfigSource
import pureconfig.generic.auto.exportReader
case class Site(name: Int, url: Either[String, Map[String, String]])
case class Config(sites: List[Site])
ConfigSource.default.loadOrThrow[Config]
Run Code Online (Sandbox Code Playgroud)
但结果是“预期类型为 OBJECT。改为找到 STRING”。
我知道 pureconfig 支持Option. 我发现没有提到支持Either,这是否意味着它可以用其他东西代替?
我有一个 HOCON 格式的文件,其中一个很长的字符串被分配给一个键。该字符串包含单引号(和其他“非法”字符),因此我需要将值括在双引号中。像这样的东西:
key="extremely long string with 'illegal' characters :;/. bla bla ..."
Run Code Online (Sandbox Code Playgroud)
为了可读性,我想把它分成多行。我很简单还没有找到一种方法来做到这一点。如果字符串没有用双引号括起来,我可以使用\分割线。如果我不关心添加换行符,我可以使用""". 但我确实关心这些事情。
我研究了非正式的 HOCON 规范,但仍未找到解决方案。
(由于 HOCON 类似于 JSON(我对此一无所知),因此我也将这个问题标记为“JSON”。)