Чистая библиотека Javascript YAML, поддерживающая как дамп, так и загрузку?[дубликат]

StackOverflow https://stackoverflow.com/questions/428364

Вопрос

На этот вопрос уже есть ответ здесь:

Существует ли такое для ЯМЛ (он же ЯМЛ)?

Если это когда-то существовало, оно, должно быть, было стерто, потому что последний поиск не дал результатов.Похоже, существует множество реализаций, которые свалка только из Javascript в вывод YAML, но возникли проблемы с поиском реализации, которая поддерживает как дамп, так и загрузку.

Кто-нибудь занимается таким...или спрос просто слишком низок для этого.

Это было полезно?

Решение

Возможно, более новая версия js-yaml здесь:

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

Другие советы

Просто искал то же самое, вот базовое Анализатор YAML на основе Javascript написано Ти Джей Головайчук в refactormycode.com.Я дублирую его здесь, чтобы он не потерялся, похоже, ссылка JsYaml на yaml.org некоторое время не работает.Еще не проверял.

;(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

Я обновляю этот вопрос, чтобы дать другое решение, над которым я сам работал: https://github.com/jeremyfa/yaml.js

Это чистый порт Javascript YAML-компонент Symfony (YAML 1.2) и поддерживает как загрузку, так и сброс.Надеюсь это поможет.

Я не уверен, где можно найти «множество реализаций», которые поддерживают дамп, но не загрузку — в той степени, в которой JSON является подходящим подмножеством YAML 1.2, я думаю, их может быть много, но это подмножество обеспечивает YAML, который не особенно удобен для человека, особенно для сложных структур данных.Большинство ссылок, которые я нашел, относятся к форкам GitHub JS-YAML, которые зависят от node.js и/или предоставляют только парсеры.

Джереми Фейвра yaml.js на bitbucket реализует как дамп, так и загрузку YAML в автономном JavaScript (я нашел его в ответ на связанный вопрос о stackoverflow).Он не поддерживается активно, но, похоже, отлично работает для умеренно сложных объектов YAML и/или javascript.

Yaml-JavaScript притворяется одновременно дампером и парсером.Никогда не пытался.

Еще есть это javascript-yaml-парсер/

Смотрите этот вопрос: JAML-парсер JavaScript, Диого Коста говорит:
Ни один из доступных парсеров YAML для javascript не удовлетворил мои потребности, поэтому я разработал свой собственный:Он доступен здесь: http://code.google.com/p/javascript-yaml-parser/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top