如何用Ruby中的单引号(')解析JSON字符串?

时间:2014-08-11 13:03:52

标签: ruby json parsing

我正在尝试解析像这样的JSON字符串:

JSON.parse("{'foo' : 42 }")

但是,这会产生JSON :: ParseError:

JSON::ParserError: 757: unexpected token at '{'foo' : 42 }'
    from /Users/nils/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/json/common.rb:155:in `parse'
    from /Users/nils/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/json/common.rb:155:in `parse'
    from (irb):2
    from /Users/nils/.rvm/rubies/ruby-2.1.2/bin/irb:11:in `<main>'

我认为它希望'字符是"字符。由于我有几千兆字节的这样的文件,我想让解析器使用它。由于某些值还可能包含'个字符,因此我不能简单地运行搜索并替换它们,因为这可能会破坏原始内容。

有关如何使JSON解析器解析此问题的任何建议吗?

1 个答案:

答案 0 :(得分:4)

  

我正在尝试解析像这样的JSON字符串:

JSON.parse("{'foo' : 42 }")

那不是JSON字符串。

  

但是,这会产生JSON::ParseError

哪个是正确的,因为字符串不是JSON。

  

有关如何使JSON解析器解析此问题的任何建议吗?

您无法使用JSON解析器解析此问题,因为它不是JSON。

您需要弄清楚它是什么语言,然后使用该语言的解析器。

您发布的代码段看起来像YAML,但当然这可能是偶然的。

require 'yaml'

YAML.load("{'foo' : 42 }")
# => { "foo" => 42 }

但请注意,试图从一个简短的例子中猜测语言是非常容易出错的。你应该与该序列化的制作者商量,并询问它们是什么语言。