yaml使用心得

  最近一段时间接触了yaml,作为一种序列化语言,yaml的可读性似乎要比xml更容易理解,比csv要更轻量级。目前,yaml作为项目中自动化框架的一种数据配置文件,在使用过程中受到一定的好评~下面总结一下在实际使用中的心得。


 

  yaml的样式:

  

  yaml的使用方法:

 1 private String yamlFile;
 2 
 3 private HashMap<String, HashMap<String, String>> ml;
 4 
 5     /**
 6     * @function 构造函数
 7     */
 8     public YamlUtil() {
 9         yamlFile = "test";
10         this.getYamlFile();
11     }
12 
13     /**
14     * @function 加载yaml文件
15     */
16     @SuppressWarnings("unchecked")
17     public void getYamlFile() {
18 
19         File f = new File("test/" + yamlFile + ".yaml");
20         try {
21             ml = Yaml.loadType(new FileInputStream(f.getAbsolutePath()),HashMap.class);
22         } catch (FileNotFoundException e) {
23             e.printStackTrace();
24         }
25     }
26 
27     /**
28     * @function 获取yaml文件中对应关键字信息
29     * @param keyword
30     * @return
31     */
32     public Map<String,String> getKeyWordInfos(String keyword) {
33 
34         HashMap<String,String> map = new HashMap<String,String>();
35         map = ml.get(keyword);
36         return map;
37     }
38 }

  yaml遇到的小坑:

  1、注意冒号的全半角....这个不多说了啊

  2、key值不能为全数字

  test.yaml:

33033:
  name:driver
  age:24

  这种情况下,在使用ml.get(keyword)的时候获取的结果是null

  3、编码格式问题,如果使用中文请用UTF-8,不可以为UTF-8-BOM格式。

  

  这种样式,在使用过程中ml.get(keyword)时,同样获取的结果是null。

    /**
     * @function 获取yaml文件中对应关键字信息
     * @param keyword
     * @return
     */
    public Map<String,String> getKeyWordInfos(String keyword) {

        HashMap<String,String> map = new HashMap<String,String>();
        for (String key : ml.keySet()){
            System.out.println(key.charAt(0));
            if (key.equals(keyword)){
                map = ml.get(keyword);
            }
        }
        
        return map;
    } 

  在执行key.equals(keyword)时,key是father,keyword也是father但是实际运行的结果是false,进一步分析发现,key和keyword的hashcode并不相等,key.charAt(0)的值是"",当时有点蒙圈。获取key的前3个字节发现结果如下,这是UTF-8的一种表现形式。最终尝试才发现是UTF-8-BOM在作怪。。

以上是本人在使用过程中遇到的问题,在此,再次感谢飞总和达子。

转载于:https://www.cnblogs.com/ucartester/p/5401298.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YAML是一种用于配置文件的格式,而JSONPath是一种用于从JSON数据提取特定值的查询语言。虽然YAML本身不直接支持JSONPath,但是可以通过在代码使用第三方库或工具来实现从YAML文件提取数据的功能。 在Python,可以使用PyYAML库来读取和解析YAML文件。然后,可以使用jsonpath-ng库来使用JSONPath语法从YAML提取数据。 首先,我们需要安装这两个库: ``` pip install pyyaml pip install jsonpath-ng ``` 接下来,我们可以编写代码来读取YAML文件使用JSONPath提取数据。下面是一个简单的例子: ```python import yaml from jsonpath_ng import jsonpath, parse # 读取YAML文件 with open('data.yaml', 'r') as file: yaml_data = yaml.safe_load(file) # 设置要提取的JSONPath表达式 expression = parse('$.users[*].name') # 在YAML数据上执行JSONPath查询 matches = [match.value for match in jsonpath(yaml_data, expression)] # 输出提取到的数据 print(matches) ``` 在上面的代码,我们首先使用`yaml.safe_load()`函数将YAML文件的数据加载到Python对象。然后,使用`parse()`函数将我们想要的JSONPath表达式解析为一个查询对象。接下来,使用`jsonpath()`函数在YAML数据上执行查询。最后,我们使用一个循环将查询结果的匹配项提取出来,并将其打印出来。 通过这种方法,我们可以使用JSONPath语法从YAML文件提取我们感兴趣的数据。需要注意的是,JSONPath语法与XPath和CSS选择器等其他查询语言之间有些许差异,因此在编写查询表达式时需要参考JSONPath的语法规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值