Как разобрать файл YAML в класс Java - PullRequest
0 голосов
/ 01 июня 2019

У меня есть класс Recipe, который представляет этот блок YAML:

id: Ex1
  uses:
    - Database: ["D1", "D2"]
    - MetaFeature: ["M1", "M2"]
    - Algorithm: ["A1", "A2"]
    - Config: ["C1", "C4"]
public class Recipe {
    private String id;
    private HashMap<String, HashSet<String>> uses;
}

Есть ли способ проанализировать этот YAML в классе Recipe, не создавая другие классы или не делая какие-то трюки?

1 Ответ

2 голосов
/ 01 июня 2019

Прежде всего, вы должны включить SnakeYML в качестве зависимости в maven pom.xml. Ниже приведена зависимость maven для snakeyml.

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.21</version>
</dependency>

Если вы не используете Maven, вы можете скачать файл jar по следующей ссылке. http://central.maven.org/maven2/org/yaml/snakeyaml/1.21/snakeyaml-1.21.jar

Я изменил бит вашего файла yml, чтобы он работал. Найдите ниже структуру файла yml.

id: Ex1
uses:
  Database: ["D1", "D2"]
  MetaFeature: ["M1", "M2"]
  Algorithm: ["A1", "A2"]
  Config: ["C1", "C4"]

Позвольте мне предоставить вам код, который работает.

import java.util.HashMap;
import java.util.HashSet;

public class Recipe {
  private String id;
  private HashMap<String, HashSet<String>> uses;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public HashMap<String, HashSet<String>> getUses() {
    return uses;
  }

  public void setUses(HashMap<String, HashSet<String>> uses) {
    this.uses = uses;
  }

  @Override
  public String toString() {
    return "Recipe{" + "id='" + id + '\'' + ", uses=" + uses + '}';
  }
}

Тестовый код в соответствии с вашим классом рецептов.

import org.yaml.snakeyaml.Yaml;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;

public class TestYml {
  public static void main(String[] args) throws Exception {
    Yaml yaml = new Yaml();
    InputStream inputStream =
        new FileInputStream("your location\\yml-file-name.yml");

    Recipe recipe = yaml.loadAs(inputStream,Recipe.class);
    System.out.println("recipe = " + recipe);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...