Как я могу динамически генерировать типобезопасный файл конфигурации (Hocon) в Scala (создать файл конфигурации) - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу генерировать конфигурацию Hocon динамически.

Ввод Карта и

выход файл с содержанием ниже

block{
key1 : value
key2 : value
}

Trying to read map
     var myMap = new util.HashMap[String,AnyRef]()
     val myConfig = ConfigFactory.parseMap(myMap)

myConfig.toString print below
Config(SimpleConfigObject({"key":"value"}))

не в состоянии выяснить, как извлечь confиз него

Я попробовал приведенную ниже опцию, но она печатает в формате JSON

val finalConfig : String =
      myConfig.root().render( ConfigRenderOptions.defaults())
println(finalConfig)

Любой другой подход для генерации conf, чтобы можно было поддерживать вложенную структуру?

Редактировать: найденное решение. Вложенную конфигурацию можно создать с помощью ConfigFactory.withValue https://marcinkubala.wordpress.com/2013/10/09/typesafe-config-hocon/

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Я не уверен, хорошо ли я понимаю вашу проблему ...

Но мне кажется, что вам нужно только отформатировать Map как HOCON -подобный String.
Который вы можете позже записать в файл.

Надеюсь, этот фрагмент кода - то, что вы ищете:

import collection.JavaConverters._

def toHocon(map: java.util.Map[String, AnyRef]): String =
  map
   .asScala
   .map { case (key, value) => s"$key : $value" }
   .mkString("block{\n\t", "\n\t", "\n}")

(я использовалодин символ табуляции для отступа, вы можете заменить его более символами табуляции или фиксированным числом пробелов) .

0 голосов
/ 12 февраля 2019

Вы можете использовать kxbmap / configs

Это поддерживает play-json из коробки.Я использую его для непосредственного сопоставления целых конфигураций с case classes.

Так что ваш пример будет выглядеть так:

import com.typesafe.config.ConfigFactory
import configs.Configs

val config = ConfigFactory.parseString("""
  block{
    key1 : value
    key2 : value
  }
  """)

config.get[Map[String, String]("block")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...