yaml
ファイルを扱うのはこれが初めてなので、最初に考えたのは、ファイルの解析に役立つライブラリを見つけることでした。
2つのライブラリYamlBean
とSnakeYaml
を見つけました。どちらを使用するのかわかりません。
ここに私が解析しようとしているファイルの例があります
users:
user1:
groups:
- Premium
user2:
groups:
- Mod
user3:
groups:
- default
groups:
Mod:
permissions:
test: true
inheritance:
- Premium
default:
permissions:
test.test: true
inheritance:
- Mod
Admin:
permissions:
test.test.test: true
inheritance:
- Mod
ファイルは動的に変更されるため、ファイルに含まれるユーザーまたはグループの数はわかりません。
これから取得したい情報は、ユーザー名とこのようなグループです
user1 Premium
user2 Mod
user3 default
このグループのグループ名のみ
Mod
default
Admin
誰でもここから始められますか?そして、これに使用するのに最適なライブラリは何ですか? YamlBeanまたはSnakeYaml。
簡単に反復できるものに情報を保存する必要があると思います。
最終的にSnakeYamlを使用し、いくつかの分割文字列を作成して問題を解決しました。
YamlファイルをObject
にロードしてからMap
にロードし、次にMap
からの結果をString[]
に分割してからfor
ループに読み込んだString[]
からの名前。グループでも同じことをしました。
より良い解決策があることは知っていますが、このプロジェクトにはこれで十分です。
返信いただきありがとうございます。
Jacksons YAML module を使用することもできます。
それを使用するには、いくつかのクラスが必要です。ファイルのコンテンツを運ぶモデルクラスと、YAMLファイルの読み取りを処理するクラス。
ルートモデルクラスは次のようになります。
public class MyYamlFile {
@JsonProperty
private List<User> users;
@JsonProperty
private List<Group> groups;
// getter methods ommitted
}
User(*)クラス:
public class User {
@JsonProperty
private List<String> name;
@JsonProperty
private List<GroupType> groups;
// getter methods ommitted
}
GroupTypeは、考えられるすべてのグループタイプを含む列挙型にすることができます。
public enum GroupType {
Premium, Mod, Default
}
Enumエントリでは大文字と小文字が区別されることを忘れないでください。そのため、「プレミアム」は機能しません。すべてのモデルクラスをそのように構築できます。すべてのサブエントリは、独自のモデルクラスを取得する必要があります。
次に、YAMLファイルを読み取ることができる部分に進みます。
public MyYamlFile readYaml(final File file) {
final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // jackson databind
return mapper.readValue(file, MyYamlFile.class);
}
あなたが見ることができるように、あなたが多くを必要としないので、この部分は本当にすてきです。ファイルインスタンスにはYAMLファイルが含まれています。次のようなものを作成できます。
File file = new File("path/to/my/yaml/usersAndGroups.yaml");
File
の代わりに、readValue
メソッドは、InputStream
、Java.io.Reader
、String
(コンテンツ全体)、Java.net.URL
、およびバイト配列もサポートします。あなたに合ったものを見つける必要があります。
(*)Jacksonでダイナミックキーを使用することはできないと思うので、YAMLファイルの構造を変更することを検討する必要があります(誰かがそれについて詳しく知っているかもしれません)。
users:
- name: user1
groups:
- Premium
- name: user2
groups:
- Mod
- name: user3
groups:
- Default
groups:
....
YamlBeanは、DMelt Java数値計算環境に含まれています( http://jwork.org/dmelt/ )。キー値マップを作成し、yamlファイルとして保存するjhplot.io.HFileYAMLクラスを使用してYamlファイルを作成できます。