Java中的人类可编辑JSON或类似YAML的程序配置

时间:2012-01-24 18:44:40

标签: java configuration hocon

是否存在类似于C ++的libconfig的Java库,其中配置文件以类似JSON的格式存储,可以由人类编辑,然后从程序中读取?

我不想使用Spring或任何更大的框架。我正在寻找的是一个小型,快速,独立的库。我查看了java.util.Properties,但它似乎不支持分层/嵌套配置数据。

4 个答案:

答案 0 :(得分:19)

我认为https://github.com/typesafehub/config正是您所寻找的。该格式称为 HOCON ,用于人工优化配置对象表示法,它是 JSON 的超集。

Examples of HOCON

HOCON 也是有效的 JSON

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

HOCON还支持标准属性格式,因此以下内容也是有效的:

foo.bar=10
foo.baz=12

我发现非常有用的功能之一是继承,这允许您进行图层配置。例如,库将具有reference.conf,使用该库的应用程序将具有application.confapplication.conf中的设置将覆盖reference.conf中的默认值。

Standard Behavior用于加载配置:

  

便捷方法ConfigFactory.load()加载以下内容   (首先列出的是更高优先级):

     
      
  • 系统属性application.conf(classpath上的所有资源都带有   这个名字)
  •   
  • application.json(类路径上的所有资源都带有此   姓名)
  •   
  • application.properties(类路径上的所有资源都带有此   姓名)
  •   
  • reference.conf(具有此名称的classpath上的所有资源)
  •   

答案 1 :(得分:4)

我找到了这个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

答案 2 :(得分:1)

Apache Commons Configuration APIConstretto似乎有些受欢迎,支持多种格式(不过提到JSON)。我个人从未尝试过,所以YMMV。

答案 3 :(得分:0)

有一个Java库可以处理JSON文件,如果这就是你要找的东西:

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

查看主页上的其他工具:

http://json.org/