Processar um ficheiro yaml
esta é a primeira vez que eu estou trabalhando com arquivos yaml
, então o primeiro penso que eu olhei foi para encontrar qualquer biblioteca que poderia me ajudar a analisar o arquivo.
Tenho de encontrar duas bibliotecas YamlBean
e SnakeYaml
Não tenho a certeza de qual vou usar.
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
o ficheiro vai mudar dinamicamente, por isso não sei quantos utilizadores ou grupos o ficheiro iria conter.
A informação que gostaria de obter este é o nome do utilizador e o grupo como esteuser1 Premium
user2 Mod
user3 default
e dos grupos apenas os nomes dos grupos, como este
Mod
default
Admin
Alguém pode fazer-me começar aqui? e qual é a melhor biblioteca para usar para isso?
YamlBean ou SnakeYaml.
Acho que preciso de guardar a informação em algo que possa facilmente superar.
3 answers
Também podes usarO módulo de Jacksons YAML .
Para usar isso, vais precisar de algumas aulas. As classes de modelos que carregarão o conteúdo de seu arquivo e a classe a que cuida de ler o arquivo YAML.A classe do modelo raiz pode ser assim:
public class MyYamlFile {
@JsonProperty
private List<User> users;
@JsonProperty
private List<Group> groups;
// getter methods ommitted
}
A classe do utilizador (*):
public class User {
@JsonProperty
private List<String> name;
@JsonProperty
private List<GroupType> groups;
// getter methods ommitted
}
O GroupType pode ser um Enum contendo todos os tipos de grupo possíveis:
public enum GroupType {
Premium, Mod, Default
}
Não te esqueças que as entradas são maiúsculas. sensivel. Então "premium" não vai funcionar. Podes construir todas as tuas aulas de modelos dessa maneira. Cada sub-entrada deve ter uma aula de modelos.
Agora para a parte em que você pode ler o arquivo YAML:public MyYamlFile readYaml(final File file) {
final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // jackson databind
return mapper.readValue(file, MyYamlFile.class);
}
Como podem ver, esta parte é muito fixe, porque não precisam de muito. A instância do ficheiro contém o seu ficheiro YAML. Você pode criar um assim:
File file = new File("path/to/my/yaml/usersAndGroups.yaml");
Em vez de File
, o método readValue
também suporta InputStream
, java.io.Reader
, String
(com todo o conteúdo), java.net.URL
e byte matriz.
Devias encontrar algo que te agrade.
(*) Você deve considerar mudar a estrutura do seu arquivo YAML, porque eu não acho que seja possível usar chaves dinâmicas com Jackson (talvez alguém saiba mais sobre isso):
users:
- name: user1
groups:
- Premium
- name: user2
groups:
- Mod
- name: user3
groups:
- Default
groups:
....
Carregou o ficheiro yaml para {[[0]} e depois para Map
, depois dividiu o resultado do Map
em String[]
e depois num laço for
li o nome do String[]
. Fiz o mesmo com os grupos.
O YamlBean está incluído no DMelt Java numeric computational environment ( http://jwork.org/dmelt/). poderá criar ficheiros Yaml com a classe jhplot. io. HFileYAML, que cria um mapa do valor-chave e grava como ficheiro yaml.