Редактируемая пользователем JSON-подобная или YAML-подобная конфигурация программы в Java

Есть ли библиотека Java, подобная libconfig для С++, где файл конфигурации хранится в формате JSON, который может быть отредактирован людьми, а затем прочитан из программы?

Я не хочу использовать Spring или любую из более крупных фреймворков. Я ищу небольшую, быструю, автономную библиотеку. Я посмотрел на java.util.Properties, но, похоже, не поддерживает иерархические/вложенные данные конфигурации.

Ответ 1

Я думаю, https://github.com/typesafehub/config - именно то, что вы ищете. Формат называется HOCON для Human-Optimized Config Object Notation, и это супер-набор JSON.

Примеры HOCON:

HOCON, который также действителен JSON:

{
    "foo" : {
        "bar" : 10,
        "baz" : 12
    }
}

HOCON также поддерживает стандартный формат свойств, поэтому справедливо следующее:

foo.bar=10
foo.baz=12

Одна из возможностей, которую я нахожу очень полезной, - наследование, это позволяет вам настраивать слои. Например, библиотека имела бы reference.conf, а приложение, использующее библиотеку, имело бы application.conf. Настройки в application.conf переопределяют значения по умолчанию в reference.conf.

Стандартное поведение для загрузки конфигураций:

Метод удобства ConfigFactory.load() загружает следующие (первыми указаны более высокий приоритет):

  • системные свойства application.conf(все ресурсы в classpath с это имя)
  • application.json(все ресурсы на пути к классам с этим имя)
  • application.properties(все ресурсы в пути к классам с этим имя)
  • reference.conf(все ресурсы в пути к классам с этим именем)

Ответ 2

Я нашел этот пример HOCON:

my.organization {
    project {
        name = "DeathStar"
        description = ${my.organization.project.name} "is a tool to take control over whole world. By world I mean couch, computer and fridge ;)"
    }
    team {
        members = [
            "Aneta"
            "Kamil"
            "Lukasz"
            "Marcin"
        ]
    }
}
my.organization.team.avgAge = 26

для чтения значений:

val config = ConfigFactory.load()
config.getString("my.organization.project.name")  // => DeathStar
config.getString("my.organization.project.description") // => DeathStar is a tool to take control over whole world. By world I mean couch, computer and fridge ;)
config.getInt("my.organization.team.avgAge") // => 26
config.getStringList("my.organization.team.members") // => [Aneta, Kamil, Lukasz, Marcin]

Ссылка: marcinkubala.wordpress.co m

Ответ 3

API конфигурации Apache Commons и Constretto кажется чтобы быть несколько популярным и поддерживать несколько форматов (однако JSON не упоминается). Я лично никогда не пробовал, так что YMMV.

Ответ 4

Там есть библиотека Java для обработки файлов JSON, если это то, что вы ищете:

http://www.json.org/java/index.html

Ознакомьтесь с другими инструментами на главной странице:

http://json.org/