Редактируемая человеком JSON-подобная или YAML-подобная конфигурация программы в Java - PullRequest
10 голосов
/ 24 января 2012

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

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

Ответы [ 4 ]

19 голосов
/ 27 ноября 2012

Я думаю https://github.com/typesafehub/config это именно то, что вы ищете. Формат называется HOCON для Оптимизированная для человека нотация объекта конфигурации , и это супер-набор 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 (все ресурсы на пути к классам с это имя)
  • application.json (все ресурсы на пути к классам с этим имя)
  • application.properties (все ресурсы на пути к классам с этим имя)
  • reference.conf (все ресурсы в classpath с этим именем)
4 голосов
/ 16 апреля 2014

Я нашел это 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

1 голос
/ 24 января 2012

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

0 голосов
/ 24 января 2012

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

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

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

http://json.org/

...