, но я указываю их между точками, так же, как ключи сопоставления.

аюсь проанализировать следующий YAML-файл, используя Groovy и Snakeyaml (очевидно, я очистил данные, но этого достаточно, чтобы продемонстрировать проблему):

---
info:
  summary: Snakeyaml Issue
examples:
  - 1st example:
      name: Example 1
      sublist:
        - 0.1:
           foo: bar

Я ожидал бы следующих заявлений:

println resource.info.summary
println resource.examples."1st example".name
println resource.examples."1st example".sublist."0.1"

дать:

Snakeyaml Issue
Example 1
[foo:bar]

а также:

println resource.examples."1st example".sublist."0.1".foo

дать:

bar

Однакофактический вывод из:

println resource.info.summary
println resource.examples."1st example".name
println resource.examples."1st example".sublist."0.1"
println resource.examples."1st example".sublist."0.1".foo

является:

Snakeyaml Issue
[Example 1]
[[[foo:bar]]]
[[bar]]

Я могу только получить желаемый результат, включив в список указатели:

println resource.info.summary
println resource.examples[0]."1st example".name
println resource.examples[0]."1st example".sublist[0]."0.1"
println resource.examples[0]."1st example".sublist[0]."0.1".foo

что кажется ненужным. Возможно, я неправильно понимаю структуру данных?

Для полноты, Groovy-код, который я использую для иллюстрации проблемы, показан ниже (я взял код CustomerResolver из Интернета, чтобы он оставался с плавающей точкой в ​​виде строк):

import org.yaml.snakeyaml.DumperOptions
import org.yaml.snakeyaml.Yaml
import org.yaml.snakeyaml.constructor.Constructor
import org.yaml.snakeyaml.nodes.Tag
import org.yaml.snakeyaml.representer.Representer
import org.yaml.snakeyaml.resolver.Resolver

def fileName = "example.yaml"
def Yaml yaml = new Yaml(new Constructor(), new Representer(), new DumperOptions(),
    new CustomResolver())
def resource = yaml.load(new File(fileName).newInputStream())

println resource.info.summary
println resource.examples."1st example".name
println resource.examples."1st example".sublist."0.1"
println resource.examples."1st example".sublist."0.1".foo

class CustomResolver extends Resolver {

    /*
     * Do not resolve float and timestamp
     */

    protected void addImplicitResolvers() {
        addImplicitResolver(Tag.BOOL, BOOL, "yYnNtTfFoO");
        addImplicitResolver(Tag.INT, INT, "-+0123456789");
        addImplicitResolver(Tag.MERGE, MERGE, "<");
        addImplicitResolver(Tag.NULL, NULL, "~nN\0");
        addImplicitResolver(Tag.NULL, EMPTY, null);

    }
}

Есть идеи?

Ответы на вопрос(0)

Ваш ответ на вопрос