SnakeYaml получить сложенные ключи - PullRequest
0 голосов
/ 09 февраля 2020

Когда это мой файл .yml:

test1: "string1"
test2:
  test3: "string2"

Как мне получить значение test3?

Map<String, Object> yamlFile = new Yaml().load(YamlFileInputStream);

yamlFile.get("test1"); // output: string1
yamlFile.get("test2"); // output: {test3=string2}

yamlFile.get("test2.test3"); // output: key not found

1 Ответ

0 голосов
/ 09 февраля 2020

YAML не имеет «сложенных ключей» . Он имеет вложенные отображения. Точка . не является специальным символом и может обычно встречаться в ключе, поэтому ее нельзя использовать для запроса значений во вложенных сопоставлениях.

Вы уже показали, как получить доступ к сопоставлению, содержащему клавишу test3 Вы можете просто запросить значение оттуда:

((Map<String, Object)yamlFile.get("test2")).get("test3");

Однако намного проще определить структуру вашего файла YAML как класс:

class YamlFile {
    static class Inner {
        public String test3;
    }

    public String test1;
    public Inner test2;
}

Затем вы можете загрузить его как это:

YamlFile file = new Yaml(new Constructor(YamlFile.class)).loadAs(
    input, YamlFile.class);
file.test2.test3; // this is your string
...