ruby - 解析没有引用键的 JSON

我知道在 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"}
>> 

(我尝试使用正则表达式在解析之前添加引号,但无法使其完全正常工作)。

最佳答案

如果除此之外的数据格式非常好,一个简单的正则表达式就可以做到:

irb(main):009:0> '{name:"hello", age:"23"}'.gsub(/([a-z]+):/, '"\1":')
=> "{\"name\":\"hello\", \"age\":\"23\"}"

https://stackoverflow.com/questions/2060356/

相关文章:

java - 序列化对象时如何让 jackson 忽略 get() 方法

c# - 如何返回 JSON 对象

android - 如何从 JSONObject 中删除 nameValuePairs 键?

json - 在 oracle 12c 中以 JSON 形式返回 sql 查询的结果

json - 确保数组中的项目属性在 Json Schema 中是唯一的?

json - 如何在 spark sql 中解析嵌套的 JSON 对象?

java - Spring 3.0 使用 jackson 消息转换器做出 JSON 响应

.net - 为什么 ServiceStack.Text 不默认日期为 iso8601?

json - 如何在 Play Framework 2.x 中实现嵌入式对象的隐式 Json 写入

java - 使用 gson 反序列化时将默认值设置为变量