我正在使用ruby 2.1.0
我有一个json文件。 例如:test.json
{
"item":[
{"apple": 1},
{"banana": 2}
]
}
使用YAML.load加载此文件是否安全?
YAML.load(File.read('test.json'))
我正在尝试加载json或yaml格式的文件。
答案 0 :(得分:5)
YAML可以加载JSON
YAML.load('{"something": "test", "other": 4 }')
=> {"something"=>"test", "other"=>4}
JSON将无法加载YAML。
JSON.load("- something\n")
JSON::ParserError: 795: unexpected token at '- something'
会有一些不起眼的案例起作用并产生不同的输出。
YAML.load("")
=> false
JSON.load("")
=> nil
但通常YAML构造不符合JSON。
所以,首先尝试使用JSON.load
,因为它可能更适合隐藏JSON的东西。
抓住JSON::ParserError
错误并回退到YAML.load
。
答案 1 :(得分:1)
在recent work I did中,我发现了Matt所指的那种极端情况。例如
puts JSON.load('{"x": "foo\/bar"}')['x']
打印成功
foo/bar
尽管逃脱是免费的,而
puts YAML.load('{"x": "foo\/bar"}')['x']
失败:
Psych::SyntaxError ((<unknown>): found unknown escape character while parsing a quoted scalar at line 1 column 7)
¹在这种情况下,根据Java net.sf.json.util.JSONUtils.quote
。请注意,他们忘记了在自己的Javadoc中进行相同的引用,具有讽刺意味的是,因此您必须浏览源代码才能理解!