Javaはsnakeyamlを使ってyamlを解析します.
3523 ワード
YAML
Yamlは「可読性が高く、人間に読みやすく、シナリオ言語と対話しやすく、資料のシーケンスを表現するためのプログラミング言語」です.XMLに似ていますが、XMLよりも簡潔で、文法的な詳細はご参照ください.http://www.ruanyifeng.com/blog/2016/07/yaml.html JAVAにも関連のライブラリがあります.解析YAMLができます.
準備工作
ここではgradleを使って依存を追加します.
ロード
先にコードを入れます
loadall
一つのyamlファイルでは複数の設定を保存して、loadAllを使って読み取りができます.複数のグループの間に3つの横棒を使って別れます.
javaオブジェクト
snakeyamlは通常のjavaタイプの読み取りにも対応しています.
dump
オブジェクトをヤmlに逆コンパイルすることもできます.
上で使っているのはすべて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(<:>
コメント
公式文書を参照:https://bitbucket.org/asomov/snakeyaml/wiki/Documentation
転載先:https://www.cnblogs.com/resentment/p/5872798.html
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
ここで戻ってきたのは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