YAML:解析包含方括号作为第一个字符的字符串时出错

Pau*_*ine 5 ruby yaml psychparser

我正在 Ruby 中解析 YAML 文件,某些输入导致 Psych 语法错误:

require 'yaml'

example = "my_key: [string] string"
YAML.load(example)
Run Code Online (Sandbox Code Playgroud)

导致:

Psych::SyntaxError: (<unknown>): did not find expected key
          while parsing a block mapping at line 1 column 1
from [...]/psych.rb:456:in `parse'
Run Code Online (Sandbox Code Playgroud)

我从我无法控制的外部 API 收到此 YAML。我可以看到编辑输入以强制解析为字符串,使用my_key: '[string] string',如“我需要在 YAML 中为字符串添加引号吗?”中所述。,可以解决问题,但我无法控制如何接收输入。

有没有办法强制将输入解析为某些键(例如 )的字符串 my_key?是否有解决方法可以成功解析此 YAML?

Sco*_*ach 4

一种方法是在将响应读取为 YAML 之前对其进行处理。假设它是一个字符串,您可以使用正则表达式将有问题的模式替换为有效的模式。IE

resp_str = "---\nmy_key: [string] string\n"
re = /(\: )(\[[a-z]*?\] [a-z]*?)(\n)/
resp_str.gsub!(re, "#{$1}'#{$2}'#{$3}")
#=> "---\n" + "my_key: '[string] string'\n"
Run Code Online (Sandbox Code Playgroud)

然后你可以做

YAML.load(resp_str)
#=> {"my_key"=>"[string] string"}
Run Code Online (Sandbox Code Playgroud)

  • 我不得不这样做太多次并且同意。这通常是恢复理智的最短路径。 (2认同)