【发布时间】:2011-01-04 20:17:03
【问题描述】:
我知道在 JSON 中,键应该用双引号引起来。但是,我使用的数据源没有引用它们,这导致 Ruby JSON 解析器引发错误。有没有办法执行“非严格”解析?
例子:
>> JSON.parse('{name:"hello", age:"23"}')
JSON::ParserError: 618: unexpected token at '{name:"hello", age:"23"}'
from /Library/Ruby/Gems/1.8/gems/json-1.1.7/lib/json/common.rb:122:in `parse'
from /Library/Ruby/Gems/1.8/gems/json-1.1.7/lib/json/common.rb:122:in `parse'
from (irb):5
>> JSON.parse('{"name":"hello", "age":"23"}')
=> {"name"=>"hello", "age"=>"23"}
>>
(我尝试使用正则表达式在解析之前添加引号,但无法使其完全正常工作)。
【问题讨论】:
-
如果不是 JSON,就不是 JSON。它可能表面上看起来很像,但正确的解决方案是修复源代码,以便它实际上给 JSON 提供了一些看起来有点像 JSON 但不是的东西。
-
不幸的是我无法控制来源,它来自第三方。
-
我认为你所拥有的是 YAML,而不是 JSON。所以使用 YAML 解析器。
-
google.com/ig/calculator?hl=en&q=100AUD=?USD 例如需要他所要求的。 @floyd 有以下解决方案 - 并且可以接受
-
Ruby 的 JSON 库有非严格模式吗? IIRC,Perl 的 JSON CPAN 模块将解析它,因为它允许像上面那样使用 Javascript-but-not-JSON。