Преобразовать HOCON (.conf) в JSON с помощью scala/play?

Я хочу преобразовать файл .conf непосредственно в json, чтобы я мог передать его во внешний интерфейс. Есть ли способ сделать это в scala/play? Это кажется невероятно громоздким по пути, который я иду сейчас:

val conf: Configuration = play.api.Configuration.apply(ConfigFactory.parseFile(new File("app/assets/strings.conf")))
conf.entrySet.seq.map(t => t._1 -> t._2.unwrapped())
// which gives me a Seq[(String, AnyRef)] which cannot be converted with Json, so the path from here is even uglier

У меня возникает соблазн вернуться к JSON, но синтаксис HOCON идеально подходит для нашего варианта использования. HOCON — это в основном JSON с меньшим количеством фигурных скобок и кавычек, поэтому преобразование должно быть очень простым. Тем не менее я не могу найти простой способ сделать что-то подобное с play/scala.


person kornfridge    schedule 30.11.2014    source источник


Ответы (2)


Это будет делать:

val config = ConfigFactory.load(); // read Config here 

val configJSON : String = 
  config.root().render( ConfigRenderOptions.concise() )

Это даст вам строку JSON.

Существуют дополнительные параметры форматирования вывода. Подробнее в документации: https://typesafehub.github.io/config/latest/api/com/typesafe/config/ConfigValue.html#render()

person Andreas Neumann    schedule 30.11.2014
comment
Работайте идеально. Благодарю вас! :) - person kornfridge; 01.12.2014
comment
NB - если вы загрузите (любая строка) вы получите не ошибку, а своего рода конфиг по умолчанию, который может вас смутить. Я пытался загрузить файл конфигурации в формате HOCON из REPL и в итоге использовал ConfigFactory.parseFile(File), чтобы убедиться, что я анализирую правильный файл. - person Peter Perháč; 08.08.2016

На случай, если кто-то придет сюда, задаваясь вопросом, как сделать то же самое на Java, по крайней мере, для игры 2.2.x вы можете сделать следующее:

config.underlying().root().render(ConfigRenderOptions.concise());
person João Antunes    schedule 28.06.2016
comment
всем тем, кто проголосовал против, пожалуйста, скажите мне, почему так здесь .. это должно быть правилом .. спасибо - person João Antunes; 28.12.2017