如何在JavaScript中存储已解析的YAML文件的行号?

时间:2016-04-08 19:31:09

标签: javascript parsing yaml

我正在编写一个解析YAML文件的Node.js应用程序。在某些情况下,我需要能够检索与值对应的行号。例如,如果YAML是 person: username: jsmith password: hunter2 我可能想要显示消息“第3行错误:密码错误”。

显然,这是一个微不足道的例子,但重点是YAML本身并没有错。

我一直在使用yamljs并且能够通过Object.defineProperty方法将行号直接添加到对象,但是这不适用于字符串,所以如果我们有以下YAML passwords: - aG00dP@ssw0Rd - hunter2 我无法为“hunter2”提供行号。

我的一些想法:

  • 列出{ lineNumber, value }对象中的所有值。这对我来说似乎很笨拙,因为我必须在所有事情上致电.value。我真的不希望行号影响任何作用于该对象的下游代码。
  • 使用行号存储值的哈希值。这不起作用,因为据我所知,我无法区分重复的字符串(例如,如果文件中还包含“hunter2”)
  • 扩展字符串以存储行号,但仍然像字符串一样。这看起来很理想,但我不知道它是否完全可能。我已经尝试过了,并没有一种方法对我有用。

还有另一种我没想过的方法吗?我提到的任何方法是否真的可行,而我一直做错了?

1 个答案:

答案 0 :(得分:0)

对于任何有兴趣的人,我最终将行号存储在数组/对象上,并将其放在字符串上。它并不理想,但试图以其他方式解决它的成本超过了收益。另外,我的用例可能会看到更多的数组/对象。

我在这里分叉了yamljs存储库:https://github.com/pumlhorse/yaml.js

修改:我遇到了另一个提到向String添加属性的问题,并意识到这是解决我的问题的方法。我修改了上面的存储库以返回String对象,而不是原语,并提供了我需要的功能。