文章目录

  • 1. 接触背景
  • 2. 使用介绍

1. 接触背景

公司这边有一部分项目是用 Ruby 实现的。而 Ruby 同事喜欢在数据库存储yaml文本,最近使用 Java 重构 Ruby 项目,就遇到了解析yaml文本的问题,所以研究了下SnakeYAML这个库。

一般他们会在相关表中的text类型的字段中存储yaml文本,Java 程序员一般是存储json文本。下面就说下我解析该类型字段的过程。目前遇到的有两种 Ruby 项目存储的yaml文本。

(1)没有ruby头的yaml文本:

---
- title: "正常"next_level: '5'color: "#32FE40"
- title: "延迟"next_level: '10'color: "#F6FF19"
- title: "超时"next_level: '15'color: "#FF3E3E"
- title: "严重超时"next_level: '20'color: "#FFFFFF"

这种直接使用SnakeYAML可以直接解析。

import org.yaml.snakeyaml.Yaml;
...
Yaml yaml = new Yaml();
List<Map> list = yaml.loadAs(yamlStr, List.class);

(2)有ruby头的yaml文本:

---
- !ruby/hash:ActionController::Parameterstitle: "处理中"next_level: '3'color: "#15E584"
- !ruby/hash:ActionController::Parameterstitle: "已超时"next_level: '5'color: "#EB8212"
- !ruby/hash:ActionController::Parameterstitle: "严重超时"next_level: '10'color: "#F10F64"

可以看到,该yaml文本有一个!ruby/hash:ActionController::Parameters标记。咨询了 Ruby 同事,说是和 Ruby 的版本有关,他们进行了版本更新,数据库中新数据都会带这个头。如果此时还直接用上面的方法解析,会报一个错误:

Exception in thread "main" Can't construct a java object for !ruby/hash:ActionController::Parameters; exception=Invalid tag: !ruby/hash:ActionController::Parametersin 'string', line 2, column 3:- !ruby/hash:ActionController::Par ... ^

所以,需要将这个头删除掉,直接替换为空串,就能正常处理了。

import org.yaml.snakeyaml.Yaml;yamlStr =  yamlStr.replace("!ruby/hash:ActionController::Parameters", "");
Yaml yaml = new Yaml();
List<Map> list = yaml.loadAs(yamlStr, List.class);

2. 使用介绍

具体使用可以直接参考官方文档:

  • YAML 官方文档。
  • SnakeYAML 官方使用文档。

参考博客:

  • YAML 语法。
  • YAML 语言教程。
  • JAVA使用SNAKEYAML解析YAML。

使用 SnakeYAML 操作 YAML 数据相关推荐

  1. java中snakeyaml工具包操作yaml文件,什么是yaml文件,yaml如何解析转换为实体,实体如何生成yaml文件

    什么是yaml文件 这里就不去搞yaml的书面意思了,其实就可以理解为一种数据文件,里面的数据是以键值对的方式存储的.java中map就是键值对的形式,我们带着这个概念去理解.举个例子: school ...

  2. python操作配置文件yaml数据读取数据写入

    YAML 语言:它实质上是一种通用的数据串行化格式 一.yaml基本语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格 缩进的空格数目不重要,只要相同层级的元素左侧 ...

  3. yaml及使用PyYaml操作yaml文件详解

    1.yaml主要用途 YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 2.yaml支持的数据结构 数据结构名称 包含的数据类型 描述说明 纯量 字符串.布尔值.整数. ...

  4. pyyaml操作yaml配置文件基于python

    在测试工作中,可以使用yaml编写测试用例,执行测试用例时直接获取yaml中的用例数据进行测试(如:接口自动化测试) 1.什么是yaml 是一种可读的数据序列化语言,通常用于配置文件 非常简洁和强大, ...

  5. Python之-操作yaml

    操作yaml文件 1.yaml介绍 yaml:Yet Another Markup Language的缩写.Yaml是专门用来写配置文件的语言,非常简洁和强大,远比json格式方便. Python搭建 ...

  6. 使用Dom4j操作XML数据

    --------------siwuxie095 dom4j 是一个非常优秀的 Java XML 的 API, 用来读写 XML 文件 和操作 XML 数据 特点:性能优异.功能强大.极端易用 dom ...

  7. nodejs操作sqlserver数据_pyspark操作MySQL、SQLServer数据库进行数据处理操作

    欢迎访问本人的CSDN博客[Together_CZ],我是沂水寒城. https://yishuihancheng.blog.csdn.net 在大数据处理领域里面,Hadoop和spark可以说是最 ...

  8. python操作yaml的方法详解

    这篇文章主要为大家介绍了python操作yaml的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助 一.参考链接 https://pyyaml.org/wiki/PyYAM ...

  9. R语言使用sqldf包按照SQL语法操作dataframe数据(Using SQL statements to manipulate data frames)

    R语言使用sqldf包按照SQL语法操作dataframe数据(Using SQL statements to manipulate data frames) 目录

  10. hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据

    概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...

最新文章

  1. hdu 1879 继续畅通工程
  2. 除了 AI,这些技术为 IIoT 插上飞向“4.0”的翅膀
  3. Java中New一个对象是个怎么样的过程?
  4. live联系人导出到CSV乱码
  5. Android应用开发:网络编程-2
  6. Python--strip()学习记录
  7. 软考-信息系统项目管理师-立项管理
  8. 原生JS封装时间运动函数
  9. ajax读取.txt文件出现乱码
  10. huffman编码的程序流程图_F28379D之CLB解码多摩川编码器2——LIB版例程讲解(原创)...
  11. sharepoint被阻止的文件类型解释说明
  12. 图解wordpress模板架构
  13. 持续图片滚动字幕html,使用JavaScript实现连续滚动字幕效果的方法
  14. 全国面向小学五六年级及初一的舞蹈方向的艺术学校舞蹈学校整理
  15. [NISACTF 2022]
  16. cpm,cpc,cps和cpa分别是什么意思
  17. shell遍历ip执行特定功能
  18. roc曲线怎么绘制_Excel怎么绘制曲线图?Excel绘制曲线图教程
  19. sigmoid和softmax
  20. c++ 不撞南墙不回头——树形动态规划(树规)

热门文章

  1. win10计算机本地组策略编辑器,Win10家庭版没有本地组策略编辑器怎么办
  2. matlab 对直方图均衡化,基于直方图均衡化的图像增强技术分析与Matlab实现_直方图均衡化matlab...
  3. Charles中文破解版下载安装及使用教程(附带免费下载链接)
  4. FPGA按键消抖—两种按键消抖形式的对比
  5. YUV的原始数据文件转rgb使用cv2显示
  6. 7,Matlab实现末端轨迹跟踪
  7. 使用EasyPoi完成复杂一对多excel表格导出功能
  8. TikTok和抖音差别大吗?
  9. 跟大家分享一下牛人常用的资源(牛客网 )!
  10. python英文参考文献格式_英文论文参考文献标准格式