Java Yml格式转换为Properties

使用Java对yaml和properties互转,保证顺序、实测无BUG版本 阅读详情

Yml格式文件转换为Properties格式

问题引入

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

需要转换的yaml文件如下

spring:
  application:
    name: xtoon-sys-server
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        enabled: true
  boot:
    admin:
      client:
        url: http://localhost:5001
        username: admin
        password: admin
        instance:
          prefer-ip: true

management:
  health:
    redis:
      enabled: false
  endpoint:
    health:
      show-details: always
  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.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

yaml文件格式转properties格式 【代码】yaml文件格式转properties格式。 阅读详情

相关推荐

yml在线格式转换工具(properties)

https://www.toyaml.com/index.html

专注基础架构领域 1万+

在线yml和properties相互转换

除了yml和properties互转之外,还可以生成代码、sql转json等,可以去用一下,用爱发电,感谢支持!

欢迎光临 8526

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5890

java yaml转properties工具类

java yaml转properties工具类 yaml文件转properties文件 yaml字符串转properties字符串 yaml转Map

没啥简介 9462

利用python爬取东方财富网股吧评论并进行情感分析(一)

利用python爬取东方财富网股吧评论(一) python-东方财富网贴吧文本数据爬取 分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直

YMG521000的博客 1万+

国际项目投标那些事(三)海外项目招标文件的组成

以一个实际的项目作为例子,是我2020年初投的一个东南亚国家的水厂的竞争性投标。这个投标的招标基于FIDIC yellow book (Design and Build) 合同模板。 海外项目的招标一般是有专门的咨询公司(consulting engineer)写招标文件,有的咨询公司非常专业,对于技术、合同、业绩的要求非常细致。 我这个项目的招标文件共5册 400多页(全英文),附件26册将...

WTSolutions的博客 2004

17 Properties与yml

这两种配置文件在使用springboot时需要配置,而任何语言都有Properties配置文件并提供类供用户使用。 各种语言都有自己所支持的配置文件,方便用户能直接在配置文件中改变变量值,java的配置文件为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释。而且有类Java.util.Properties来读取该配置文件。它继承自H...

Michaelia_hu的博客 265

Win10 + Linux 双系统删除(Linux)

删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理

weixin_52247624的博客 943

springboot整合常见问题(一)将application.properties文件更改为application.yml文件

properties改为yml

Garnett_zk的博客 3415

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。 本篇文章将演示怎样在Unity中接入百度翻译,实现文本自动翻译的功能。

努力前行,总会成为自己心中的那道光 9059

多源异构数据在线可视化ETL编排平台深度实践:基于Python与Apache Calcite的现代数据管道构建

在当今企业数据环境中,数据源呈现爆发式增长与高度异构性。传统ETL工具面对多源(MySQL、PostgreSQL、MongoDB、Hive、文件系统等)与异构(结构化、半结构化、非结构化)数据时,往往面临扩展性差、学习曲线陡峭、难以融入现代DevOps体系等问题。本文深入探讨了如何构建一个基于Python/Pandas、Apache Calcite(通过JPype桥接)以及Vue.js前端的轻量级、在线可视化ETL编排平台。

2201_76125261的博客 75

Spring Boot -- 两种应用配置文件的编写方式 & 两种读取自定义配置方式

常用配置 application.properties server.port 启动端口,默认8080 server.servlet.context-path 应用上下文,相当于为当前的应用接口加了一个统一的前缀。当有多个应用且都有同一个 /firstrequest 接口时,就是通过应用上下文进行区分的 logging.file.name=d:/logs/myspringboot.log 应用输出日志的目录,配置后日志不仅在控制台输出,还会输出到指定的日志文件 logging.level.root=

支棱起来 682

UI自动化控制PC端微信获取当前群聊的群友列表

在一个月前,某个群友在获取整个群的群友信息时遇到了一点问题: 对整个群进行群友数据获取经测试确实有点棘手,下面我将我的解决过程公布给大家。 基础教程详见: https://blog.youkuaiyun.com/as604049322/article/details/121391639 人工打开要抓取的群聊窗口后,首先获取微信窗口并点击聊天信息按钮: import uiautomation as auto auto.uiautomation.SetGlobalSearchTimeout(1) wechatWind

小小明-代码实体的专栏 3万+

spring boot 项目配置文件

格式类型:spring boot支持3种配置文件,分别是xx.properties,xx.yaml,xx.yml;1、创建application--test.yml---application--dev.yml---application--prod.yml,分别代表测试环境,开发环境,生产环境的配置文件。环境:测试环境,开发环境,生成环境;默认是8080,项目中端口是否要修改酌定决定,由研发总监指定,---也可以指定端口。3、作为开发人员根据实情用哪个环境的配置文件--在主要文件下增加使用的环境名称。

weixin_51482243的博客 699

C#上位机之海康相机开发(SDK)实战教程

SDK的接口设计遵循“句柄-操作-释放”模式,掌握→→→的流程,就能完成基础开发;工业场景需重点关注稳定性:断连重连、内存管理、抗干扰(网口相机的IP设置、触发信号的可靠性);进阶功能(如图像处理、多相机同步)需结合视觉库(EmguCV)和硬件特性(GPIO触发),但前提是保证基础采集的稳定。建议新手先跑通SDK自带的C#示例,理解每个函数的作用,再逐步替换为自己的代码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2193

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

yml在线格式转换工具(properties)

但是Spring Boot项目配置项多,yml文件看起来不是很方便,这里博主找到了一款可以相互转换的工具,我们看一下效果。yml,即yaml文本格式文件的后缀名,yaml可以用来替代properties,配置文件短的情况下可读性更好一些。

weixin_46228563的博客 4672

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

yml和properties互转 java编码 YamlUtil

主要是看网上没有直接进行properties转yml的代码,于是就自己参考github上的一些,然后自己进行封装了一层 源码 import com.alibaba.fastjson.JSON; import xxxxxx.ConfigValueTypeEnum; import lombok.Data; import lombok.experimental.UtilityClass; import org.yaml.snakeyaml.Yaml; import java.util.*; import jav

zhouzhenyong的专栏 1652

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringBoot中.properties或.yml重点配置和pom.xml中依赖总结

application.properties或yml重点配置总结 application.properties和yml格式转换 格式在线转换工具 yml格式注意点: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 kye-value的关系使用冒号代表,格式为key: value, 注意冒号后面要加一个空格,不然解...

YOUNGljx的博客 1337

JSON数据格式:以及XML文件格式,YML文件格式,properties文件格式

JSON数据格式:以及XML文件格式,YML文件格式,properties文件格式 数据格式: json数据格式:属于轻量级数据格式,是javascript的一种描述数据的格式。具有易于解析,语法简单的特点,广泛应用与网络间的数据传输。 {"name":"Li","age":"18"} XML数据格式:属于重量级数据格式,在以前主要是用XML进行数据的传输,但他的格式比...

weixin_30536513的博客 336

springboot~application.properties和application.yml的使用

在springboot框架里进行项目开始时,我们在resource文件夹里可以存放配置文件,而格式可以有两种,properties和yml,前者是扁平的k/v格式,而后者是yml的树型结构,我们建议使用后者,因为它的可读性更强,如果现有是properties,也可以转换成yml格式,我们把properies里按.去拆分即可。 例如:下面是properties格式的配置 spring.dat...

weixin_34092370的博客 322

在线yml-properties相互转换

在线yaml转properties-在线properties转yaml-ToYaml.com自用

m0_73570288的博客 1918

properties转yml

分享一个在线properties转yml工具,也支持yml转properteis: http://toyaml.com/ 域名非常好记:to yaml .com yml,即yaml文本格式文件的后缀名,yaml可以用来替代properties,可读性更好一些。 目前springboot的配置文件已经同时支持properties和yaml格式。 properties中的格...

weixin_30472035的博客 247

在线YAML转Properties工具

在线YAML转Properties工具 在线YAML转Properties工具 YAML是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。 YAML:(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感 Propertie

Linux,Java,SpringBoot,Python,Lua略知一点 1万+

sprintboot读取自定义配置文件properties、yml、yaml,环境springboot2.4.4

我这里使用的是springboot2.4.4的版本,其他版本自测 在要赋值的Bean类上面添加注解,prefix是你配置的前缀 @ConfigurationProperties(prefix = "alipay") 再添加注解,注意是@PropertySource 不是@PropertySources,最后没有s @PropertySource(value = {"classpath:alipay.properties"}) 然后添加@Comment注解添加到IOC容器中,使用@Autowir

魑魅魍魉 466
上一篇: Java 与 Rust 性能对比
下一篇: window系统安装 NodeJS
Chengdu.S
博客等级 码龄9年 283粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chengdu.S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值