【问题标题】:YAML: error parsing a string with escaped double quoteYAML:解析带有转义双引号的字符串时出错
【发布时间】:2013-10-19 01:32:11
【问题描述】:

Ruby 2.0,使用 Psych 的 Yaml 似乎无法转义双引号。有人有解决这个问题的想法吗?

data_ =<<END_
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
END_

ap YAML.load(data_)

生产

    /Users/x/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/psych.rb:205:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 1 column 1 (Psych::SyntaxError)    

用单引号转义条目是可行的,但如果它包含单引号,转义它们也会导致错误。

description: 'Acme acquires ILM: Lucas says "It\'s Inevitable!"'

在理想情况下,条目将包含正确的 unicode 印刷引号,但我无法控制这些(尽管我可以在使用 YAML 处理之前替换它们)...

关于让 YAML 正确解析这个的任何想法?

更新:回答我的问题。发现可以通过复制来转义单引号,所以这是可行的:

description: 'Acme acquires ILM: Lucas says "It''s Inevitable!"'

我通过使用 YAML.dump(the-desired-string) 发现了这一点

【问题讨论】:

    标签: ruby string parsing escaping yaml


    【解决方案1】:

    您的问题是,就转义而言,heredocs 的行为就像双引号字符串。这意味着您的heredoc 中的\" 在您的字符串中最终只是"。观察:

    >> data_ =<<END_
    description: "Acme acquires ILM: Lucas says \"Inevitable!\""
    END_
    >> puts data_
    description: "Acme acquires ILM: Lucas says "Inevitable!""
    

    您想将 \ 放入 YAML 字符串中,因此您必须对其进行转义:

    data_ =<<END_
    description: "Acme acquires ILM: Lucas says \\"Inevitable!\\""
    END_
    

    或者,使用%q{...} 引用您的字符串,使其表现得更像单引号字符串:

    data_ = %q{
    description: "Acme acquires ILM: Lucas says \"Inevitable!\""
    }
    

    【讨论】:

    • 我可能会构建你想要的结构作为 Ruby 对象,然后 to_yaml 它来获取字符串,少引用废话来担心这种方式。
    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 2013-01-10
    • 2015-10-27
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多