我刚想找同样的东西,这里有一个基本的基于Javascript的YAML解析器,是由Tj Holowaychuk在refactormycode.com编写的。我在这里复制它,以确保它不会丢失,看起来yaml.org上的JsYaml链接已经破损了一段时间了。还没有测试过。
;(function(){
YAML = {
valueOf: function(token) {
return eval('(' + token + ')')
},
tokenize: function(str) {
return str.match(/(---|true|false|null|#(.*)|\[(.*?)\]|\{(.*?)\}|[\w\-]+:|-(.+)|\d+\.\d+|\d+|\n+)/g)
},
strip: function(str) {
return str.replace(/^\s*|\s*$/, '')
},
parse: function(tokens) {
var token, list = /^-(.*)/, key = /^([\w\-]+):/, stack = {}
while (token = tokens.shift())
if (token[0] == '#' || token == '---' || token == "\n")
continue
else if (key.exec(token) && tokens[0] == "\n")
stack[RegExp.$1] = this.parse(tokens)
else if (key.exec(token))
stack[RegExp.$1] = this.valueOf(tokens.shift())
else if (list.exec(token))
(stack.constructor == Array ?
stack : (stack = [])).push(this.strip(RegExp.$1))
return stack
},
eval: function(str) {
return this.parse(this.tokenize(str))
}
}
})()
print(YAML.eval(readFile('config.yml')).toSource())
// config.yml
---
# just a comment
list: ['foo', 'bar']
hash: { foo: "bar", n: 1 }
lib:
- lib/cart.js
- lib/cart.foo.js
specs:
- spec/cart.spec.js
- spec/cart.foo.spec.js
# - Commented out
environments:
all:
options:
failuresOnly: true
verbose: false
这里可能有更新版本的js-yaml:
Jeremy Faivre在bitbucket上的yaml.js以独立的JavaScript实现了YAML的转储和加载(我从相关StackOverflow问题的答案中了解到该项目)。它虽然没有得到积极的维护,但似乎可以处理较为复杂的YAML和/或JavaScript对象。
参见这个问题:JavaScript YAML解析器,Diogo Costa说:
没有一个可用的JavaScript YAML解析器能满足我的需求,所以我开发了自己的:它可以在这里找到: http://code.google.com/p/javascript-yaml-parser/