将PKL与其他配置框架集成

问题描述 投票:0回答:1

我的项目使用的是hocon配置。我想逐渐将其迁移到 PKL。为了促进过渡期,我希望能够引用旧配置中的一些配置值。

我尝试通过提供自定义资源阅读器来实现它:

import com.typesafe.config.*;
import org.pkl.core.SecurityManagerException;
import org.pkl.core.resource.ResourceReader;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Optional;

class HoconResourceReader implements ResourceReader {
    private Config config = ConfigFactory.load();
    public Optional<Object> read(URI uri) {
        if (config.hasPath(uri.getSchemeSpecificPart())) {
            var value = config.getAnyRef(uri.getSchemeSpecificPart());
            return Optional.of(value.toString());
        } else {
            return Optional.empty();
        }
    }
    public String getUriScheme() { return "hocon"; }
    public boolean hasHierarchicalUris() { return true; }
    public boolean isGlobbable() { return true; }
}

它对于标量值(即字符串)效果很好。但我需要它能够提供复合结构(即具有属性的动态对象)。

有没有办法从自定义值创建对象?

java pkl
1个回答
0
投票

我在这里能想到的一种方法是保留资源读取器方法,但让它将 HOCON 转换为 JSON,然后在 Pkl 中使用 JSON。这是因为 Pkl 已经在该语言中内置了一个 JSON 解析器。

样品包:

import "pkl:json"

jsonifiedHocon = read("hocon:some.value")

result = new json.Parser {}.parse(jsonifiedHocon)
© www.soinside.com 2019 - 2024. All rights reserved.