JSON 转 Properties 工具
把 JSON 对象转换成 Java .properties 格式,支持嵌套对象展平和注释回填,纯浏览器本地运行。
输入一个 JSON 对象,即可生成 java.util.Properties 和 Spring Boot 都能加载的 Java .properties 文件。嵌套对象变成 server.port=8080 这样的点号键;分隔符和换行都用反斜杠转义,值经过往返转换也保持原样;$comments 映射则写回为 # 注释行。整个过程在浏览器中运行,不上传任何内容。
关于 JSON 转 Properties 工具
.properties 是逐行解析的格式,所以序列化时,凡是会改变 Java 切分一行方式的字符都要转义:键里的空格写成 \ (反斜杠加空格),值里的 = 或 : 写成 \= 或 \:,换行写成 \n。键和值之间统一用 = 连接,嵌套的 JSON 对象按原有顺序展平成点号键。像 café 这样的非 ASCII 文本直接以 UTF-8 写出,而不是转成 \uXXXX 转义。Java 9 及以后的版本会按 UTF-8 读取资源包(resource bundle),但 Properties.load(InputStream) 按 ISO-8859-1 解码,所以在自己的代码里加载时,请通过 UTF-8 的 Reader 来读取。
你可能还需要
如何把 JSON 转换成 .properties
- 1
准备 JSON 对象
在输入框里粘贴对象,或点烧瓶图标载入 { "server": { "port": 8080 } } 示例;顶层的每个键都会成为属性名。
- 2
设定键的分隔符
高级选项里可以保留 Java 惯用的点号(spring.datasource.url 就是这种写法),换成别的分隔符,或者关闭展平,让嵌套对象以 JSON 文本保留。
- 3
转换并核对转义
点击「转换」后,每个叶子值写成一行 key=value;键里的空格、值里的分隔符以及换行都加上反斜杠,java.util.Properties 读回来的值与原来一致。
- 4
放进 src/main/resources
复制输出,或下载为 .properties 文件放到 src/main/resources 下;要再解析成 JSON,用切换方向图标。
参考资料
- Java SE — java.util.Properties
官方 Java API 文档,定义了本工具输出所对应的 .properties 文件格式。
- RFC 8259 — The JSON Data Interchange Format
本工具解析的 JSON 输入格式所依据的 IETF 规范。
相关开发者工具
JSON 转 Properties 常见问题
- 哪些字符前面会加反斜杠?
- 键里的空格、值里的 = 和 :,以及换行符。例如 a\ b=x\=y、note=line1\nline2——这些正是 java.util.Properties 加载文件时会还原的转义写法。
- 中文等非 ASCII 字符会写成 \uXXXX 吗?
- 不会,直接写成 UTF-8 原文。Java 9 及以后按 UTF-8 加载 .properties 资源包;但 java.util.Properties#load(InputStream) 默认按 ISO-8859-1 解码,如果你的代码用的是这个 API,请改用 load(Reader) 并配合 UTF-8 的 Reader。
- 能用 JSON 生成 Spring Boot 的 application.properties 吗?
- 可以。Spring Boot 的配置项本来就是点号命名,在默认的点号分隔符下,{ "server": { "port": 8080 } } 会输出 server.port=8080。
- JSON 数组会写成 hosts[0]=a 这种索引形式吗?
- 不会。数组作为一个值写出,内容就是它的 JSON 文本,例如 hosts=["a","b"];Spring Boot 那种 hosts[0]=a 的索引写法不会生成。
- server.port=8080 里的 8080 还算数字吗?
- 在 .properties 里,值永远是字符串,所以 true、false 和数字都按纯文本写出。用 Properties 转 JSON 并开启类型推断,就能把它们还原成真正的 JSON 类型。
- $comments 里的说明会变成什么?
- 会写成对应键上方的 # 注释行——Properties 转 JSON 产出的 $comments 对象正好能这样原样带回来。把「注释处理」设为「忽略」,输出就只剩 key=value 行。
- 转换时数据会发到服务器吗?
- 不会。解析和格式化都在浏览器本地完成,不会产生任何携带你数据的网络请求。