ruby JSON.parse无法处理带点但不带分数的十进制数

ruby JSON.parse无法处理带点但不带分数的十进制数,json,ruby,parsing,decimal,point,Json,Ruby,Parsing,Decimal,Point,我有一个json字符串,如下所示: {"weight": 56.} 我可以将此字符串输入到NodeJS解释器中,并得到一个已解析的哈希: $ js > {"Weight":56.} { Weight: 56 } > {"Weight":56} { Weight: 56 } 如您所见,NodeJS接受两个结果相同的输入 但是在Ruby中,对于相同的字符串 JSON::ParserError:。。。意外标记 直到我删除编号后的“.” 示例会话: irb...> s='{"Wei

我有一个json字符串,如下所示:

{"weight": 56.}
我可以将此字符串输入到NodeJS解释器中,并得到一个已解析的哈希:

$ js
> {"Weight":56.}
{ Weight: 56 }
> {"Weight":56}
{ Weight: 56 }
如您所见,NodeJS接受两个结果相同的输入

但是在Ruby中,对于相同的字符串

JSON::ParserError:。。。意外标记

直到我删除编号后的“.”

示例会话:

irb...> s='{"Weight":56.}'
=> "{\"Weight\":56.}"
irb...> JSON.parse(s)
JSON::ParserError: 784: unexpected token at '{"Weight":56.}'

可以对Ruby JSON库做些什么来改进它与JS的一致性吗


根据JSON规范,
56,
是一个无效的数字:a
后面必须跟一个数字。至少由C和Fortran支持。因此,NodeJS(v8)也支持它也就不足为奇了。在Ruby中,这是有问题的,因为在点之后可能会有一个方法调用,比如56.abs。但是JSON.parse期望作为其输入的是JSON,而不是Ruby代码“JSON.parse期望作为其输入的是JSON”——是的,没错。它需要JSON,而不是C、Fortran或JavaScript。而
56.
在JSON中无效,无论它在其他语言中是否有效。
irb...> s='{"Weight":56}'
=> "{\"Weight\":56}"
irb...> JSON.parse(s)
=> {"Weight"=>56}