如何使用 java 展平动态 yaml 文件

How to flatten dynamic yaml file using java

我想使用 java 将动态 yaml 文件解析为 HashMap 并使用点语法访问它们(即“a.b.d”)

给出以下 example.yml:

        ---
a:
  b:
    c: "Hello, World"
    d: 600

并且可以将其获取为

 outPutMap.get("a.b.d");

Results:
600

知道如何实现吗?

正如 Thorbjørn 在评论中所说,HashMap 可能不是表示 YAML 文件的正确数据结构。

您应该尝试查看 tree structures

可能类似于:

public class Node {

  private final String name;
  private final Object value;
  private final Node parent;
  private final Collection<Node> children = new ArrayList<Node>();

  public Node(Node parent, String name) {
    this.parent = parent;
    this.name = name;
  }

  public Node getParent() {
    return this.parent;
  }

  public String getName() {
    return this.name;
  }

  public Collection<Node> getChildren() {
    return this.children;
  }

  public void addChild(Node child) {
    child.parent = this;
    children.add(child);
  }

}

然后您只需逐行解析 YAML 文件并构建节点,将所有从属节点添加为最近的父节点的子节点。

最终您将拥有一个填充的树结构,从顶部 Node 开始向下遍历树中的每个 Node

然后您可以编写一个方法来解析您想要的点语法中的字符串,然后相应地导航树结构以找到想要的 Node.

请注意,将值存储为 Objects 不是一个好主意,您应该实现某种值包装器,例如 NumberValue(将值存储为 double)和 StringValue (将值存储为 String),这样您就不必将 Object 转换为不同的类型。