当前位置:  开发笔记 > 编程语言 > 正文

支持转储和加载的纯Javascript YAML库?

如何解决《支持转储和加载的纯JavascriptYAML库?》经验,为你挑选了3个好方法。

YAML(又名YAML)是否存在这样的事情?

如果这种情况一度存在,它必定已被删除,因为最新的搜索出现了虚无... 看起来有很多实现只能从Javascript 转储到YAML输出,但无法找到支持转储和加载的实现.

是否有人在做这样的事情......或者对此的要求太低了.



1> Matt Gardner..:

只是寻找相同的,这是一个由Tj Holowaychuk在refactormycode.com上编写的基于Javascript的基本YAML解析器.我在这里重复它以确保它没有丢失,看来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



2> Jeremyfa..:

我更新这个问题以提供另一个我自己工作的解决方案:https://github.com/jeremyfa/yaml.js

它是Symfony YAML Component(YAML 1.2)的纯javascript端口,支持加载和转储.希望这可以帮助.



3> Paul Brannan..:

可能是更新版本的js-yaml:

http://github.com/visionmedia/js-yaml


我刚刚发布了我们的js-yaml(对于node.js) - PyYAML解析器的javascript端口(发射器将在以后).您可以使用`npm install js-yaml`安装它.或者帮助开发:https://github.com/nodeca/js-yaml
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有