lee*_*d00 1 javascript yaml node.js
当使用js-yaml 3.10.0包 在 node.js (v4.8.7) 中加载YAML 锚点时(这里有一个很好的使用示例),我收到以下错误:
“无法合并映射;提供的源对象不可接受”
例如,在我的输入 yaml 文件中,我有类似以下内容作为我的锚点:
defaultEd: &defaultEd
- 'Pennsylvania College of Technology AS'
- 'Pennsylvania College of Technology BS'
Run Code Online (Sandbox Code Playgroud)
在我的输入 yaml 文件中引用锚点的地方,我有以下内容:
...
education:
<<: *defaultEd
qs:
- 'Reading'
- 'Writing'
...
Run Code Online (Sandbox Code Playgroud)
我希望在我的输出中完成以下任务:
education:
- 'Pennsylvania College of Technology AS'
- 'Pennsylvania College of Technology BS'
Run Code Online (Sandbox Code Playgroud)
错误显示如下:
{ [YAMLException: cannot merge mappings; the provided source object is unacceptable at line 21, column 1:
qs:
^]
name: 'YAMLException',
reason: 'cannot merge mappings; the provided source object is unacceptable',
mark:
Mark {
name: null,
buffer: 'defaultEd: &defaultEd\n - \'Pennsylvania College of Technology AS\'\n - \'Pennsylvania College of Technology BS..
<<: *defaultEd\nqs:\n - \'Reading\'\n - \'Writing\'\n - \'Rithmatick\'\nexperience:\n - {posName: \'Database Analyst / Net Tech\', companyName: \'Choices People Supporting People\'}\n\u0000',
position: 435,
line: 20,
column: 0 },
message: 'cannot merge mappings; the provided source object is unacceptable at line 21, column 1:\n qs:\n ^' }
Error View file does not exist: someTest.yml
Run Code Online (Sandbox Code Playgroud)
您可能误解/混淆了别名和合并键的用法<<。
YAML 中的任何节点都可以附加一个锚点:
---
mapping: &map
a: 1
b: 2
sequence: &seq
- a
- b
scalar: &scalar foo
mapping-alias: *map
sequence-alias: *seq
scalar-alias: *scalar
Run Code Online (Sandbox Code Playgroud)
<<某些处理器支持merge key ,它不是 YAML 规范本身的一部分。它允许您将别名映射合并到另一个映射中。
defaults: &defaults
a: 1
b: 2
# .....
some-mapping:
<<: *defaults
c: 3
Run Code Online (Sandbox Code Playgroud)
请参阅http://yaml.org/type/merge.html
YAML 中的映射在编程语言中通常称为字典、关联数组、哈希,有时也称为对象 (Javascript)。
就您而言,您可能只想要:
education: *defaultEd
Run Code Online (Sandbox Code Playgroud)