我有两个键 - app.user =' user1'和app.user.age =' 21' 。我需要在yml文件中写这些。当我写这些时,我会收到错误 -
1) app:
user: 'user1'
age: '21'
错误:此处不允许映射值
2) app:
user: 'user1'
app:
user:
age:'21'
error: **duplication error**
答案 0 :(得分:1)
如果我们假设符号x.y
在y
引用的映射中具有语义 x
的值,那么您的数据模型在解释为YAML数据时会自相矛盾。 。请注意,此表示法未在YAML中定义。基于这个假设,这就是矛盾:
app.user = 'user1' (1)
app.user.age= '21' (2)
声明(1)
表示:
app 的值是映射。此映射包含一个键用户,其值为内容为
user1
的标量。
声明(2)
表示:
app 的值是映射。此映射包含一个键用户,其值也是映射。在该映射中,有一个键 age ,其值为
21
。
矛盾显而易见:app.user
不能是声明(1)
暗示的标量值和声明(2)
同时隐含的映射。所以解决方案显然是从数据模型中消除矛盾。一种可行的方法是:
app:
user:
id: 'user1'
age: '21'
至于重复错误:YAML禁止映射包含相等的键。在您的代码中,根映射中有两个键app
,这会导致错误。
注意:强>
我知道是数据序列化,允许密钥同时具有简单的和复杂值。我只能猜测你从那里得到了你的模型的想法。它本身并不是错误的,只是不受YAML的支持。 Boost的INFO文件格式就是其中一种格式。
修改强>
如果你不同意我上面关于x.y
的语义的假设,你可能来自Java地,java.lang
和java.util
除了名字之外完全没有任何关系具有相同的前缀。最重要的是,它们是包java
的不子包(如果令您感到惊讶,请阅读docs中的包的显式层次结构部分)。
遵循此语义,您的数据中没有层次结构,因此您的YAML中没有层次结构。而不是编写嵌套映射,你会写:
app.user: 'user1'
app.user.age: '21'
请注意,.
不是特殊的YAML字符,而只是值键的一部分。