YAML文件解析

YAML是一种记语的外语缩写,YAML 是一种比JSON(json多层次{ 与 [ 会被搞晕的)更直观的表现形式,展示上更易查错和关系描述。因为不需要一个专业工具就可以排查正确性。YAML目前有多种语言提供了支持。

  JAVA最终是要被序列化或反序列化,Jackson 提供了YAMLFactory.,可以方便解析YAML,并且可以无缝结合ObjectMapper.对原有系统改动最小。

Maven 引用以下包

 <dependency>
   <groupId>com.fasterxml.jackson.dataformat</groupId>
   <artifactId>jackson-dataformat-yaml</artifactId>
   <version>2.3.3</version>
</dependency>
 <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.3.3</version>
 </dependency>
 1 public class YmalFc<T> {
 2
 3     private final YAMLFactory yamlFactory;
 4     private final ObjectMapper mapper;
 5     private final Class<T> klass;
 6
 7     public YmalFc(Class<T> klass) {
 8         this.klass = klass;
 9         this.yamlFactory = new YAMLFactory();
10         this.mapper = new ObjectMapper();
11         mapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
12
13     }
14
15     public T build(String path) throws IOException {
16         try {
17             InputStream input =new FileInputStream(path);
18             YAMLParser yamlParser = yamlFactory.createParser(input);
19             final JsonNode node = mapper.readTree(yamlParser);
20             TreeTraversingParser treeTraversingParser = new TreeTraversingParser(node);
21             final T config = mapper.readValue(treeTraversingParser, klass);
22             return config;
23         } catch (Exception e) {
24             throw e;
25         }
26     }
27
28     public static void main(String[] args) {
29         Contact contact = new Contact();
30         YmalFc<Contact> ymalFc = new YmalFc<Contact>(Contact.class);
31         try {
32             contact = ymalFc.build(new FileConfigurationSourceProvider(), "contact.yml");
33         } catch (IOException e) {
34             e.printStackTrace();
35         }
36     }
37 }
 1 public class Contact {
 2     @JsonProperty
 3     public String name;
 4     @JsonProperty
 5     public int age;
 6
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public int getAge() {
14         return age;
15     }
16     public void setAge(int age) {
17         this.age = age;
18     }
19 }

YML文件

contact:
  name: Nathan Sweet
  age: 28

YML文件像Python 一样是一个需要注意空格缩进的语言。

时间: 2024-12-14 09:45:58

YAML文件解析的相关文章

python yaml 文件解析及str、repr函数的说明

记录说明 yaml 文件解析的方法及str.repr函数的区别 1. yaml 文件解析 config.yml site_name: AJPy pages: - Introduction: index.md - AJP overview: ajp.md theme: readthedocs code: 中文 解析yaml 文件 import yaml import os class OperateYaml(object): """ 操作yaml 文件 ""

python解析yaml文件

YAML语法规则: http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/ 下载PyYAML: http://www.yaml.org/ 解压安装: python setup.py install 1.新建test.yaml文件,内容如下: name: Tom Smith age: 37 spouse: name: Jane Smith age: 25 children: - name: Jimmy Smith age: 15 - nam

day5模块学习--yaml文件处理

yaml文件处理(http://pyyaml.org/wiki/PyYAMLDocumentation)     摘要: 本文讲的是yaml在python上的使用教程详解, YAML是一种容易人类阅读.适合表示程序语言的数据结构.可用于不同程序间交换数据.支持泛型工具.支持串行处理.丰富的表达能力和可扩展性.易于使用的语言.YAML利用缩进或者是explicit indicatior(如{})来表示属. YAML是一种容易人类阅读.适合表示程序语言的数据结构.可用于不同程序间交换数据.支持泛型工

golang yaml配置文件解析

yaml文件语法 此模块内容转自:http://www.ruanyifeng.com/blog/2016/07/yaml.html 1 大小写敏感 2 使用缩进表示层级关系 3 缩进时不允许使用Tab键,只允许使用空格. 4 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注释,从这个字符一直到行尾,都会被解析器忽略. YAML 支持的数据结构有三种 1 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary) 2 数组:一组按次序

Hyperledger Fabric相关文件解析

1相关文件说明 这一部分涉及相关配置文件的解析, 网络的启动涉及到多个文件,本文按以下顺序进行分析: . ├── base │?? ├── docker-compose-base.yaml #1 │?? └── peer-base.yaml #2 ├── channel-artifacts ├── configtx.yaml #5 ├── crypto-config.yaml ├── docker-compose-cli.yaml #3 ├── docker-compose-couch.yaml

Kubernetes之yaml文件详解-v1.15.x

Kubernetes之yaml文件详解 K8S 创建资源的方式 K8S有两种创建资源的方式:kubectl 命令和 yaml 配置文件. kubectl命令行:最为简单,一条命令就OK,但缺点也很明显,你并不知道这条命令背后到底做了哪些事!yaml配置文件:提供了一种让你知其然更知其所以然的方式.优势如下: 完整性:配置文件描述了一个资源的完整状态,可以很清楚地知道一个资源的创建背后究竟做了哪些事:灵活性:配置文件可以创建比命令行更复杂的结构:可维护性:配置文件提供了创建资源对象的模板,能够重复

Intel HEX文件解析

近期有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序.眼下的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比較麻烦的.由于每次的编译完以后都须要通过一个USB线来完毕传输烧录的工作,这个还是非常麻烦的. 原理解读 在Arduino中.利用USB来完毕传输烧录大概是这么一个过程. 每一个Arduino源程序.即sketch文件,经过一系列的编译处理以后.终于会形成一个Intel HEX格式的文件.这个HEX文件事实上就一个被封装

AndroidNative层文件解析漏洞挖掘指南

| 导语 本文以手Q的一次文件解析类漏洞挖掘为例,叙述了Android Native层文件解析类型漏洞挖掘的过程 手Q这个应用从功能来说十分的庞大,如果使用类似MFFA的框架去挖掘文件解析类漏洞,效率低,而且文件入口在哪儿.如何利用脚本进行自动化都是非常大的问题.本文在一次手Q的文件解析类漏洞挖掘的过程中,提出了一种可能的解决问题的方案,妄称指南不吝赐教. 目录: 1.问题分析 2.流程图 3.so筛选 4.测试程序编写 5.test case生成 6.测试得出crash 7.未来的工作 0x0

Atitit。Tree文件解析器的原理流程与设计实现&#160;&#160;java&#160;&#160;c#&#160;php&#160;js

Atitit.Tree文件解析器的原理流程与设计实现  java  c# php js 1. 解析原理与流程1 1.1. 判断目录  ,表示服  dirFlagChar = "└├─";1 1.2. 剑豪制表符出现的位置与文件夹级别对应表1 1.3. 主要判读流程2 2. Tree结果2 3. Code----3 4. 结果5 1. 解析原理与流程 1.1. 判断目录  ,表示服  dirFlagChar = "└├─"; 其中-类似于剑豪的制表符是表示目录的..够