背景
在json.org网站上,字符串被定义为"char+"
where char+
is one 或 more char
。A是除orchar
之外的任何 unicode 字符。允许使用控制字符的子集,只需将它们转义:"
\
"foo"
"2"
"\\"
在 Javascript 中,如果要解析字符串,则需要将其括起来:
"\"foo\""
或'"foo"'
,但不是"'foo'"
在 Rails 3 中,运行 C 或纯 Ruby 代码的JSON gem是默认的。
根据接受的答案,gem 解析 JSON 文档而不是元素。文档是键、值(对象/散列)或值(数组)形式的集合。
问题
字符串
假设我们要解析字符串foo
,我们需要将其括为"\"foo\""
or'"foo"'
JSON.parse("\"foo\"")
JSON.parse('"foo"')
屈服
JSON::ParserError unexpected token at '"foo"'
意味着它无法解析"foo"
数字
数字也是如此:'3'
or "3"
will yield Needs at least two octets
。更大的数字(八位字节是一个字节,所以两个 utf8 字符是两个字节):'42'
或者"42"
简单地产生相同的JSON::ParserError unexpected token at '42'
解决方法
如果它们在数组中,gem 会正确解析这些东西:'["foo"]'
或'[3]'
jsonstring = '"foo"'
JSON.parse( "[#{jsonstring}]" )[0]
产量
"foo"
这是荒唐的。我没有正确理解某些东西吗?还是这个宝石被窃听了?