如果这种情况一度存在,它必定已被删除,因为最新的搜索出现了虚无...看起来有很多实现转储从Javascript到YAML输出,但是找不到支持转储和加载的实现很困难。
是否有人在做这样的事情......或者对此的要求太低了。
答案 0 :(得分:7)
只是寻找相同的内容,这是Javascript-based YAML parser在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
答案 1 :(得分:6)
我更新此问题以提供我自己处理的另一个解决方案:https://github.com/jeremyfa/yaml.js
它是Symfony YAML Component(YAML 1.2)的纯javascript端口,支持加载和转储。希望这会有所帮助。
答案 2 :(得分:5)
这里可能是更新版本的js-yaml:
答案 3 :(得分:4)
我不确定在哪里支持转储而不是加载的“大量实现” - 在JSON是YAML 1.2的正确子集的范围内,我想可能有很多这些,但是那个子集使得YAML不是特别人性化的,特别是对于复杂的数据结构。我发现的大多数链接都是JS-YAML的github分支,它依赖于node.js和/或只提供解析器。
Jeremy Faivre在bitbucket上的yaml.js在独立的javascript中实现了YAML的转储和加载(我从answer to a related stackoverflow question找到它)。它没有被主动维护,但似乎适用于中等复杂的YAML和/或javascript对象。
答案 4 :(得分:2)
yaml-javascript假装同时是转储器和解析器。没试过。
答案 5 :(得分:2)
请参阅此问题:JavaScript YAML Parser,Diogo Costa说:
没有一个可用的javascript YAML解析器满足了我的需求,所以我开发了自己的:它可以在这里找到: http://code.google.com/p/javascript-yaml-parser/