草庐IT

Yaml进阶

AC编程 2023-10-11 原文

一、等价写法

yaml虽然对格式严格要求,但支持多种写法。

1.1 数组

方式一

list_by_dash:
  - foo
  - bar

方式二

list_by_square_bracets: [foo, bar]
1.2 map

方式一

map_by_indentation:
  foo: bar
  bar: baz

方式二

map_by_curly_braces: {foo: bar, bar: baz}
1.3 String

方式一

string_no_quotes: Monty Python

方式二

string_double_quotes: "Monty Python"

方式三

string_single_quotes: 'Monty Python'

二、长字符串

通过大于号后面追加一个长字符串

disclaimer: >
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    In nec urna pellentesque, imperdiet urna vitae, hendrerit
    odio. Donec porta aliquet laoreet. Sed viverra tempus fringilla.

三、多行字符串

但如果你想写一个带换行的多行字符串,使用 |

mail_signature: |
      Martin Thoma
      Tel. +49 123 4567

四、变量

email: &emailAddress "info@example.de"
id: *emailAddress

第一行通过& 定义变量,在第二行可以使用 *emailAddress 引用这个变量。

五、类型转换

我们可以定义通用的类型

price: !!float 42
id: !!str 42

还可以定义特点编程语言支持的类型

tuple_example: !!python/tuple
  - 1337
  - 42
set_example: !!set {1337, 42}
date_example: !!timestamp 2020-12-31

六、单文件拆分成多个

子配置文件名为application-filename.yml

spring:
  profiles:
    include: filename

多个子文件

spring:
  profiles:
    include: 
     - filename1
     - filename2

七、多文档支持

YAML支持使用三个破折号分割文档------上下两部分会作为两个独立的文档同等对待。

foo: bar
---
fizz: buzz

使用场景:我们在k8s 里面经常将deployment和sevice 放到同一个yaml文件中。

八、配置List数组对象并映射

1、User实体类

@Data
public class User {
    private Integer id;
    private String name;
    private Integer age;
}

2、yaml配置

com:
  company:
    list:
      - id: 1
        name: tom
        age: 20
      - id: 12
        name: jerry
        age: 25

3、UserList配置类

@Configuration
@ConfigurationProperties(prefix = "com.company")
@Data
public class UserList {
    private List<User> list;
}

4、测试

@Test
    public void listTest(){
        List<User> list = userList.getList();
        for(User user:list){
            System.out.println(user);
        }
        System.out.println(userList);
    }

有关Yaml进阶的更多相关文章

  1. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

  2. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

  3. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

  4. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  5. ruby-on-rails - Rails 控制台的 YAML 输出 - 2

    在Rails控制台中执行类似yGrau.all的命令时,我得到这些奇怪的!binary字符串而不是属性名称。知道如何解决这个问题吗?谢谢。irb(main):003:0>yGrau.all←[1m←[36mGrauLoad(0.0ms)←[0m←[1mSELECT"graus".*FROM"gr←[1m←[35mEXPLAIN(0.0ms)←[0mEXPLAINQUERYPLANSELECT"grauEXPLAINfor:SELECT"graus".*FROM"graus"0|0|0|SCANTABLEgraus(~1000000rows)----!ruby/object:Grauat

  6. ruby-on-rails - 冒号(:) gives load error in locale YAML file - 2

    我在en:语言环境中有一个字符串display_device:toplay:getplayer冒号给我的错误是cannotloadtranslationsfromC:/DocumentsandSettings/rajg/discoveryaws/branches/internationalization/config/locales/en.yml,expectedittoreturnahash,butdoesnot我怎样才能让它工作? 最佳答案 如果你用这样的引号将它括起来,你可以在你的字符串中转义冒号(和其他“重要”字符):dis

  7. ruby-on-rails - 如何以递归方式将 YAML 文件扁平化为 JSON 对象,其中键是点分隔的字符串? - 2

    例如,如果我有YAML文件en:questions:new:'NewQuestion'other:recent:'Recent'old:'Old'这最终会变成一个json对象,例如{'questions.new':'NewQuestion','questions.other.recent':'Recent','questions.other.old':'Old'} 最佳答案 由于问题是关于在Rails应用程序上使用YAML文件进行i18n,因此值得注意i18ngem提供了一个辅助模块I18n::Backend::Flatten完全像

  8. Ruby YAML 多文档 - 2

    这是我的YAML文件“test.yml”:---alpha:100.0beta:200.0gama:300.0---3...第一个文档是一个散列。第二个文档是一个整数。我正在尝试将它们作为散列和整数加载到Ruby程序中。这是我目前的尝试:require'yaml'variables=YAML.load_file('test.yml')putsvariables.inspect 最佳答案 要访问单个文件中的多个YAML文档,请使用load_stream方法(正如“matt”在对其他答案之一的评论中提到的):YAML.load_stre

  9. ruby - 如何获取适用于 ruby​​ 1.9.1 的 to_yaml 方法的格式化选项? - 2

    根据YAML文档,可以传递hashofoptions到.to_yaml方法。目前,当我按照文档中的建议传递选项时,它不起作用,哈希被忽略。irb(main):001:0>require'yaml'=>trueirb(main):002:0>user={"1"=>{"name"=>"john","age"=>44}}user.to_yaml=>"---\n\"1\":\nname:john\nage:44\n"现在,传递一些选项:irb(main):014:0>user.to_yaml(:Indent=>4,:UseHeader=>true,:UseVersion=>true)=>"--

  10. ruby - Perl 和 Ruby 之间的 YAML 数据交换问题 - 2

    我在通过YAML在Perl和Ruby之间交换数据时遇到问题。我有一些看起来像数字:数字的值,例如1:16。Perl的YAML库(Tiny和XS)将其编码为1:16,不带引号。Ruby的YAML库(Psych)不会将其解释为字符串,而是以某种方式变成Fixnum值4560。我不知道如何在任何一方解决这个转换问题。我用例的YAML中的每个值都应该是一个对象或字符串。因此,如果存在这样的选项,我可以告诉PerlYAML库引用所有值。或者有什么方法可以告诉RubyYAML库将所有​​值解释为字符串?有任何想法吗?从逻辑上讲,改变任何一方的语言都不是一种选择。Perl:useYAML::XSqw

随机推荐