Javaはsnakeyamlを使ってyamlを解析します.

3523 ワード

YAML
Yamlは「可読性が高く、人間に読みやすく、シナリオ言語と対話しやすく、資料のシーケンスを表現するためのプログラミング言語」です.XMLに似ていますが、XMLよりも簡潔で、文法的な詳細はご参照ください.http://www.ruanyifeng.com/blog/2016/07/yaml.html JAVAにも関連のライブラリがあります.解析YAMLができます.
準備工作
ここではgradleを使って依存を追加します.
compile 'org.yaml:snakeyaml:1.17'
あとで使えます.
ロード
先にコードを入れます
    @Test
    public void load() throws FileNotFoundException{
        //   Yaml   
        Yaml yaml = new Yaml();
        File f=new File("test.yaml");
        //    
        Object result= yaml.load(new FileInputStream(f));
        System.out.println(result.getClass());
        System.out.println( result);
    }
----test.yaml---
a: 1
b: 2
----  ---
class java.util.LinkedHashMap
{a=1, b=2}
ここでロード方法はString、InputStream、Readerを入力としてサポートします.
loadall
一つのyamlファイルでは複数の設定を保存して、loadAllを使って読み取りができます.複数のグループの間に3つの横棒を使って別れます.
    @Test
    public void loadall() throws FileNotFoundException {
        Yaml yaml = new Yaml();
        File f = new File("test.yaml");
        Iterable result = yaml.loadAll(new FileInputStream(f));
        for (Object obj : result) {
            System.out.println(obj.getClass());
            System.out.println(obj);
        }
    }
----test.yaml---
a: 1
b: 2
---
c: 3
----  ---
class java.util.LinkedHashMap
{a=1, b=2}
class java.util.LinkedHashMap
{c=3}
ここで戻ってきたのはIterableで、各オブジェクトの解析は遍歴した時に行われます.怠惰なロードです.
javaオブジェクト
snakeyamlは通常のjavaタイプの読み取りにも対応しています.
    @Test
    public void loadPojo() throws FileNotFoundException {
        Yaml yaml = new Yaml();
        File f = new File("test.yaml");
        Map result= (Map) yaml.load(new FileInputStream(f));
        System.out.println(result);
        System.out.println(result.get("pojo"));
        System.out.println(result.get("pojo2"));
    }
public class Pojo {
    public String name;
    public Pojo(String name){
        this.name=name
    }
    @Override
    public String toString(){
        return "name->"+name;
    }
}
----test.yaml---
pojo: !!yaml.Pojo {name: name}
pojo2: !!yaml.Pojo [ name]
ここでは、簡単に一つのpojoを定義してから、プロファイルには二つの方式の第一号があります.(大括弧を使う)は変数名によって与えられます.第二種類(かっこを使う[]は構造方法によって与えられます.
dump
オブジェクトをヤmlに逆コンパイルすることもできます.
    @Test
    public void dump() throws FileNotFoundException {
        Yaml yaml = new Yaml();
        Pojo p=new Pojo();
        p.name="name";
        System.out.println( yaml.dump(p));
    }
----  ---
!!yaml.Pojo {name: name}
設定
上で使っているのはすべてYAMLの無参構造方法です.実はYAMLは構造方法の中に以下の4つの構成パラメータがあります.
トラック
オブジェクトを構成するための作成プロセス
representer
yamlファイルにおけるレスポンス解析の対象となるRepresenter representer=new Representer();representer.addClass TagここですcarはCarタイプを使って解析します.再構成ファイルに全carのパッケージ名representer.addClass Tag(Wheel.class,Tag.MAP)を書く必要はありません.Wheelを使ってmapのタイプを解析します.
dumpoption
これはdumpの場合、出力の幅、配置、種類などの情報を制御します.
reolver.
暗黙的に対応するタイプを識別するために使用され、対応するpatternを満たすと対応する「解析を行うyaml.addImplicitResolaver」(new Tag(「!dice」)、Pattern.com ile(「\d+」)、「12345789」)を使用します.
alias merge
ヤmlはエイリアス参照(&エイリアス用*参照用)およびmerger(<:>
- &anchor
  boolean: true
  integer: 3
- <<: integer:="" integer="3}," boolean="true}]</code"/>
二つ目のmap自動mergeがアプリケーションのbootleanを見てintegerが元の値3をカバーしています.
コメント
公式文書を参照:https://bitbucket.org/asomov/snakeyaml/wiki/Documentation
転載先:https://www.cnblogs.com/resentment/p/5872798.html