Properties 转 JSON 实战:把 Java 配置读成嵌套对象
把 Java 的 .properties 配置转成 JSON,点号键展开成嵌套对象,server.port=8080 落到该在的位置,讲清楚 Spring Boot 迁移、和 yaml 互转、全程浏览器本地的做法。
Properties 转 JSON 实战:把 Java 配置读成嵌套对象
接手一个老 Java 服务,第一眼看到的往往是几百行 application.properties。键按字母排,server 的设置和 logging 的设置被混在一起,想看清结构得不停 grep 前缀。把它转成 JSON,点号键收成一棵树之后,这堆配置才真正可读。这篇讲的就是 .properties 转 JSON 这件事的几个真实场景,和容易踩的坑。
key=value 转对象,点号键转嵌套
.properties 的本质是一行行的键值对,分隔符既可以是等号也可以是冒号。server.port=8080 和 server.port:8080 是同一回事。难点不在分隔符,在那个点号。
Java Properties.load 读出来的其实是扁平的键,server.port 就是一个字符串键。但 Spring Boot 的宽松绑定会把它当成嵌套路径,绑到 @ConfigurationProperties 的嵌套 bean 上。所以转 JSON 时有两种合理结果:展开成嵌套对象,或者原样留成扁平字符串键。
拿一个最小例子。输入:
server.port=8080
server.servlet.context-path=/api
spring.datasource.url=jdbc:mysql://localhost:3306/app
logging.level.root=INFO
开启点号键展开后,输出是这样一棵嵌套树:
{
"server": {
"port": "8080",
"servlet": {
"context-path": "/api"
}
},
"spring": {
"datasource": {
"url": "jdbc:mysql://localhost:3306/app"
}
},
"logging": {
"level": {
"root": "INFO"
}
}
}
server.port=8080 落进 server 对象里的 port 字段,正是 Spring 绑定时它该在的位置。把展开开关关掉,同一份输入就保留成 {"server.port":"8080", ...} 这样的扁平键,当下游消费方要的是字面属性名时用这个。我自己改一个 Hibernate 配置时就吃过亏:习惯性开着嵌套转,结果目标程序读的是扁平键,白白排查了半小时,后来才意识到一个开关的事。
Spring Boot 配置迁移的典型用法
最常见的场景是部署流程变了。服务还在读 application.properties,但新的 CI 把配置当成一个 JSON 块注入。这时候手工翻译几百个键又慢又容易漏,漏一个数据库密码就是一次线上事故。
把整个 properties 文件粘进 Properties ⇄ JSON 互转,保持点号键展开打开,拿到的嵌套 JSON 树能直接对上原来那批 bean,复制进 values 文件就行。带 profile 的 application-prod.properties 也是一样转,一次转一个文件。
反向也成立:你在文档里把配置设计成 JSON,但目标应用只认 java.util.Properties,切换方向后嵌套对象会扁平化回点号键,等号和 unicode 都按规范转义好,Java 读取器不用改就能收。
和 YAML 互转,以及为什么值都是字符串
很多团队后来又从 .properties 迁到了 application.yml。这条链路其实是 properties 转 JSON,JSON 再转 YAML。先把 properties 转成嵌套 JSON,结构清楚了,再用 YAML ⇄ JSON 转换 落成 yml,层级关系一一对得上,比直接手写 yaml 缩进靠谱。
这里有个反复有人问的点:为什么 port=8080 转出来是字符串 "8080" 而不是数字。因为 .properties 把一切都当文本存,它没有类型这个概念。工具如实保留是故意的:一旦去猜类型,版本号 1.10 会被悄悄变成数字 1.1,邮编 01234 会丢掉前导零变成 1234。把判断类型这件事留到你清楚意图的应用代码里去做,反而更安全。
几个容易翻车的细节
- 冒号也是分隔符。
timeout:30是键timeout、值30,不是一个叫timeout:30的键。真要在键里写冒号,转义成反斜杠加冒号。 - 行尾留了多余反斜杠。一行以单个反斜杠结尾会续到下一行,值末尾不小心多写一个,就会把下一行整个吞进这个值。要保留字面反斜杠,写成两个反斜杠。
- 注释不会保留。以
#或!开头的行是注释,JSON 没有注释语法,转换时直接丢掉。要留文档说明,就把原始 .properties 放进版本库,把 JSON 当成生成产物。
全程在你的浏览器里跑
解析、展开点号键、转义、扁平化回 JSON,每一步都是标签页里的纯 JavaScript。配置、键、密钥都不上传也不记录。唯一要留心的是分享链接会把输入写进查询字符串,所以配置里有凭据时,用复制按钮粘文本,别分享网址。把它当成一个随手就能用、又不会把你的数据库密码送出去的本地工具,这是它和那些要你上传文件的在线转换器最大的区别。
Made by Toolora · Updated 2026-06-13