如何编写Books集合以便我可以锚定单个项目?该文件无效。
Books:
- Title: The Cat in the Hat &catInTheHat
Author: Dr. Seuss
- Title: Harry Potter
Author: JK Rowling
People:
- Name: Bill
FavoriteBook: *catInTheHat
- Name: Edna
答案 0 :(得分:6)
是的,你可以,但在你的例子中你没有锚,并且因为你有一个没有相应锚的别名,你会收到一个错误(你应该因为这是不允许的)。
你所拥有的是一个标量字符串The Cat in the Hat &catInTheHat
,它在中间某处有一个&符号
如果要定义锚点,则需要将放在实际项目之前(标量,序列,映射)。
如果您只想为The Cat in the Hat
添加标量字符串FavoriteBook
(这是标题的值),您可以这样做:
Title: &catInTheHat The Cat in the Hat
Author: Dr. Seuss
有了这个,如果在解析之后从序列的第一个元素访问FavoriteBook
的值,该元素是toplevel键People
的值(在Python中:data['People'][0]['FavoriteBook']
)你得到字符串"帽子里的猫"。
如果您希望序列的第一个元素是Books
的值,则必须执行此操作:
Books:
- &catInTheHat
Title: The Cat in the Hat
Author: Dr. Seuss
- Title: Harry Potter
Author: JK Rowling
然后你实际上得到了映射(dict / hash / map取决于你的编程语言)的表示,然后你可以从中直接检索标题和作者。 根据您使用的编程语言和YAML解析器,解析器可能会解析"别名,如果它引用标量(字符串,整数等)或不。转储从YAML源表示的数据会导致丢失锚点和别名。对于集合(序列,映射),通常情况并非如此(即它们在内存中引用相同的集合对象,并在序列化时写为锚点+别名)。