Java Yml格式转换为Properties

article/2025/1/16 13:07:34

Yml格式文件转换为Properties格式

  • 问题引入
  • 转换代码
  • 代码解读

问题引入

使用在线的yml转换properties, 发现有属性内容漏了,网站地址https://tooltt.com/yaml2properties/。
于是自己动手写个转换工具类,自测过多个 yml 文件,目前没发现遗漏的。

需要转换的yaml文件如下

spring:application:name: xtoon-sys-servercloud:nacos:config:server-addr: localhost:8848file-extension: yamlenabled: trueboot:admin:client:url: http://localhost:5001username: adminpassword: admininstance:prefer-ip: truemanagement:health:redis:enabled: falseendpoint:health:show-details: alwaysendpoints:web:exposure:include: "*"

在线转换网站转换的结果

spring.application.name=xtoon-sys-server
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=yaml
spring.boot.admin.client.url=http://localhost:5001
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

正确的转换结果应该如下

spring.application.name=xtoon-sys-server
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.enabled=true
spring.boot.admin.client.url=http://localhost:5001
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
spring.boot.admin.client.instance.prefer-ip=true
management.health.redis.enabled=false
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

在线网站转换结果截图如下
在这里插入图片描述
对比原始文本和转换结果,发现少了几个属性

spring.cloud.nacos.config.enabled=true
spring.boot.admin.client.instance.prefer-ip=true
management.health.redis.enabled=false

这几个结果有些特征,value值是boolean类型的。不知道还有没有其它类型的数据会有遗漏的?

转换代码

导入yaml读取jar

<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.33</version></dependency>

Java 代码

package com.scd.tool;import org.yaml.snakeyaml.Yaml;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;/*** @author James*/
public class YamlToProperties {public static void main(String[] args) {Yaml yaml = new Yaml();String filePath = "file/yaml/bootstrap.yml";try (InputStream inputStream = new FileInputStream(filePath)) {Object object = yaml.load(inputStream);List<String> resultList = travelRootWithResult(object);System.out.println(resultList);} catch (IOException e) {throw new RuntimeException(e);}}private static List<String> travelRootWithResult(Object object) {List<String> resultList = new ArrayList<>();if (object instanceof LinkedHashMap) {LinkedHashMap map = (LinkedHashMap) object;Set<Object> keySet = map.keySet();for (Object key : keySet) {List<String> keyList = new ArrayList<>();keyList.add((String) key);travelTreeNode(map.get(key), keyList, resultList);}}return resultList;}private static void travelTreeNode(Object obj, List<String> keyList, List<String> resultList) {if (obj instanceof LinkedHashMap) {LinkedHashMap linkedHashMap = (LinkedHashMap) obj;linkedHashMap.forEach((key, value) -> {if (value instanceof LinkedHashMap) {keyList.add((String) key);travelTreeNode(value, keyList, resultList);keyList.remove(keyList.size() - 1);} else {StringBuilder result = new StringBuilder();for (String strKey : keyList) {result.append(strKey).append(".");}result.append(key).append("=").append(value);System.out.println(result);resultList.add(result.toString());}});} else {StringBuilder result = new StringBuilder();result.append(keyList.get(0)).append("=").append(obj);System.out.println(result);resultList.add(result.toString());}}
}

运行结果如下,对比之后发现没有出现遗漏的

spring.application.name=xtoon-sys-server
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.enabled=true
spring.boot.admin.client.url=http://localhost:5001
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
spring.boot.admin.client.instance.prefer-ip=true
management.health.redis.enabled=false
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

大家使用的时候只需要改一下filePath

代码解读

可以把yml 看成多个树,问题就转换成了遍历树的问题,我们需要获取树的路径以及子节点。树的路径是properties的key, 叶子节点是properties的value


http://chatgpt.dhexx.cn/article/g0Q80NVW.shtml

相关文章

Spring Boot配置文件yml格式详解

在Spring Boot项目中配置文件格式可以是.properties格式,也可以是yml格式,但是一般使用yml格式的比较多,yml格式都有什么语法?yml格式怎么配置?本文将详细的讲解yml的具体使用。 简介 YAML 是一种简洁的非标记语言(YAML Ain’t Markup Language),YAML以数据为中心,使用空…

连线图

电子发声单元接线图 点阵单元接线图 点阵实验接线图 连线设计图

五类直连线做法

五类直连线两头线序相同&#xff0c;都是 白橙、橙、白绿、蓝、白蓝、绿、白棕、棕 如下图所示&#xff0c;将水晶头卡扣朝下&#xff0c;插入网线后用网线钳夹紧即可。

连连看(三)

Python3 实现QQ游戏连连看游戏辅助 连连看&#xff08;零&#xff09;—— 前记连连看&#xff08;一&#xff09;—— 你看&#xff0c;这是截图啊连连看&#xff08;二&#xff09;—— 哦吼&#xff0c;PIL CV2 Numpy 假图像识别构建矩阵连连看&#xff08;三&#xff09…

连点成线

做技术和做产品都需要沉心深研。做技术侧重对物性的理解&#xff0c;突破原有限制&#xff0c;创造新的领域&#xff1b; 做产品侧重对人性的理解&#xff0c;善于使用技术&#xff0c;创造简单易用的服务。技术需要落地于产品&#xff0c;展示其威力; 产品需要新技术的引擎&am…

图解计算机基础网站上线了

大家好&#xff0c;我是小林。 就在昨天 4 点半&#xff0c;我收到了工信部的短信&#xff0c;通知了我的域名备案完成了&#xff01; 足足等待了一周&#xff0c;域名终于备案完了&#xff0c;久等了各位&#xff01;心急的小伙伴&#xff0c;可以到末尾见直接看网站域名。 …

股票K线几种线型基本规则

1.经典蜡烛图&#xff1a; K线颜色&#xff1a; 如果收盘价格 > 开盘价格则是涨色&#xff1b; 如果收盘价格 < 开盘价格则是跌色&#xff1b; 如果收盘价格 开盘价格&#xff0c;则判断收盘价格 > 昨收价格是涨色反之是跌色。 K线形状&#xff1a; 中间垂直线…

5.1、【 K线图的练习】

有经验的股民都知道K线基本功的重要性。在早些时候不依靠其他的一些量化指标&#xff0c;仅凭老股民对K线的理解&#xff0c;就可以做到不错的收益率。 各种k线组合&#xff0c;比如黄昏星、启明星&#xff0c;多方炮&#xff0c;乌云盖顶。。。几十种最基本的经典k线信号&…

如何看k线图的图解法

K线图是黄金白银投资分析的基础手段&#xff0c;我们建议大家认真理解关于k线图的基础知识&#xff0c;掌握好如何看k线图图解的方式&#xff0c;如果能将相关知识融会贯通&#xff0c;日后的投资就等于成功了一大半。   K线图直观、立体感强、信息丰富的特点&#xff0c;通过…

一步一步教你写股票走势图——K线图四(高亮联动一)

目录 一步一步教你写股票走势图——分时图一&#xff08;概述&#xff09; 一步一步教你写股票走势图——分时图二&#xff08;自定义xy轴&#xff09; 一步一步教你写股票走势图——分时图三&#xff08;对齐图表、自定义柱状图高亮&#xff09; 一步一步教你写股票走势图…

连连看(五)

Python3 实现QQ游戏连连看游戏辅助 连连看&#xff08;零&#xff09;—— 前记连连看&#xff08;一&#xff09;—— 你看&#xff0c;这是截图啊连连看&#xff08;二&#xff09;—— 哦吼&#xff0c;PIL CV2 Numpy 假图像识别构建矩阵连连看&#xff08;三&#xff09…

如何看k线图图解

K线图是贵金属投资者进行技术分析的基础手段&#xff0c;建议刚刚接触朋友认真理解关于k线图的基础知识&#xff0c;如果能掌握好K线&#xff0c;日后的学习看盘和技术分析就会容易得多。 K线图直观、立体感强&#xff0c;而且信息丰富&#xff0c;是金融投资分析中最常用和最基…

【数据结构和算法】超多图解,超详细,堆详解

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,数据结构和算法、C/C++、面试、刷题、Linux尽管咨询我,关注我,有问题私聊! 🎈 关注专栏:图解数据结构和算法 (优质好文持续更新中……)🚀 🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬 目录

图中的十字链表

转载于:https://www.cnblogs.com/qxym2016/p/7434591.html

2021韩顺平图解linux_狗剩学习笔记

韩顺平图解Linux全面升级 https://www.bilibili.com/video/BV1Sv411r7vd 27 小时 、153 讲&#xff0c; 2021 韩顺平 一周学会Linux 简介 目录 P001_韩顺平图解Linux全面升级_课程内容 20:37 P002_韩顺平图解Linux全面升级_应用领域 05:05 P003_韩顺平图解Linux全面升级…

中点画线完整算法c语言,中点画线算法

在网上看中点画线算法&#xff0c;很多说法是中点画线类似于Breshehanm画线。 但是助教说的中点画线是寻找直线两端点的中点进行画点&#xff0c;然后分别递归左右半段直线。 当年不好好学习&#xff0c;递归掌握的不好&#xff0c;现在自己试了试&#xff0c;可谓小费时。 代码…

图文详解超五类网线的接法

如何做网线&#xff1f;如何检测网线是否做好&#xff1f;详见网线及网络水晶头接法图解网线如五类&#xff0c;超五类网线和六类被广泛用于企业网络、数据中心网络或者家庭网络中&#xff0c;越来越多的网线类型正逐渐被发明出来&#xff0c;它们可以支持不同的传输距离和应用…

地图制图小技巧_点匹配线方向

目录 目的 实现步骤 功能介绍 功能入口 关键参数 结果 问题延伸 目的 我们在配图的时候&#xff0c;会遇到一种特定的需求&#xff1a;需要对点设置一个风格&#xff0c;并且符号风格自动跟相连或者相交的线保持垂直。 这种是否能够在SuperMap iDesktopX中自动实现呢&#xff0…

4.点与线

点与线 常用方法 glBegin与glEnd OpenGL的图元绘制放在函数glBegin和glEnd之间&#xff0c;由函数glBegin的参数指定绘制图元的类型。 结构类似于: glBegin(XXXXXX);xxxxxxxxxxxxxxglEnd();其中&#xff0c;glBegin后可填参数&#xff0c;来确定要绘制的图元类型 模式图元类…