微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将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 举报,一经查实,本站将立刻删除。