将HOCON字符串转换为有效json字符串的库或算法

问题描述

我仅限于在Java应用程序的配置文件中使用hocon。 我的问题是我无法更改格式,但现在需要将其存储在仅接受平面yaml文件的另一个后端中。

示例app.conf文件

play {
  http {
    port = 9000
    port = ${?HTTP_PORT}
    secret.key = "secretKey"
    secret.key = ${?APPLICATION_SECRET}
    errorHandler = Example.handler.ErrorHandler
  }
}

尝试1:使用TypesafeConfig读取和解析hocon文件

final ConfigRenderOptions renderOptions = ConfigRenderOptions.defaults()
          .setoriginComments( false )
          .setJson( true )
          .setComments( false );


// Render mergedConfig: Config
String jsonFromHocon = mergedConfig.root().render( renderOptions );
final JsonNode jsonNodeTree = mapper.readTree( jsonFromHocon );

发生这种情况时有两个问题:

  • mapper.readTree将引发错误,因为play.http.port的第二个条目不是数字,也没有引用,${?HTTP_PORT}文字值;我想保留hocon的功能,如果不加引号,则包括env替换。

  • 即使将值转换为合法值-转换为json时,也会被最后一个值覆盖。这样会破坏与hocon的功能对等。

关于如何利用typeSafe配置功能将conf输出到半有效json的任何想法。

除非能够操纵值的结果,否则无法使用打包的json解析器。 我在Google上搜索了一些如何自定义读取值的方法,但是目前还不可行。

预期输出: 在所有值上加上引号,并将值__replace__附加到所有具有重复键的键上,并具有env vars

play {
  http {
    port = "9000"
    port__replace__ = "${?HTTP_PORT}"
    secret.key = "\"secretKey\""
    secret.key__replace__ = "${?APPLICATION_SECRET}"
    errorHandler = "Example.handler.ErrorHandler"
  }
}

请证明我错了!或提出一个想法! 那里有hocon格式到yaml格式解析器吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)