gpt4 book ai didi

java - 解析 YAML 文件

转载 作者:IT老高 更新时间:2023-10-28 20:33:43 28 4
gpt4 key购买 nike

这是我第一次使用 YAML 文件,所以我首先想到的是找到任何可以帮助我解析文件的库。

我找到了两个库,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?

我想,我需要将信息保存在我可以轻松迭代的内容中。

最佳答案

您也可以使用 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 可以是包含所有可能的组类型的 Enum:

public enum GroupType {
Premium, Mod, Default
}

不要忘记枚举条目是区分大小写的。所以“溢价”是行不通的。您可以通过这种方式构建所有模型类。每个子条目都应该有一个自己的模型类。

现在到您可以读取该 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");

除了 FilereadValue 方法还支持 InputStreamjava.io.Reader String(包含全部内容)、java.net.URL 和字节数组。你应该找到适合你的东西。

(*) 您应该考虑更改 YAML 文件的结构,因为我认为 Jackson 无法使用动态 key (也许有人对此了解更多):

users: 
- name: user1
groups:
- Premium
- name: user2
groups:
- Mod
- name: user3
groups:
- Default
groups:
....

关于java - 解析 YAML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25796637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com