在json.org网站上,字符串定义为"char+"
,其中char+
是一个或多个char
。 char
是除"
或\
之外的任何unicode字符。允许控制字符的子集,只是逃避它们:
"foo"
"2"
"\\"
在Javascript中,如果要解析字符串,则需要将其括起来:
"\"foo\""
或'"foo"'
,但不是"'foo'"
在Rails 3中,运行C或纯Ruby代码的JSON gem是默认的。
根据接受的答案,gem解析JSON文档而不是元素。文档可以是键,值(对象/哈希)或值(数组)形式的集合。
假设我们要解析字符串foo
,我们需要将其括在"\"foo\""
或'"foo"'
JSON.parse("\"foo\"")
JSON.parse('"foo"')
产量
JSON::ParserError unexpected token at '"foo"'
意味着它无法解析"foo"
数字也是如此:'3'
或"3"
将产生Needs at least two octets
。
较大的数字(八位字节是一个字节,因此两个utf8字符是两个字节):'42'
或"42"
只产生相同的JSON::ParserError unexpected token at '42'
如果gem位于数组中,它会正确解析这些内容:'["foo"]'
或'[3]'
jsonstring = '"foo"'
JSON.parse( "[#{jsonstring}]" )[0]
产量
"foo"
这太荒谬了。我不正确地理解某事吗?或者这个宝石被窃听了吗?
答案 0 :(得分:4)
json.org州:
JSON基于两种结构:
名称/值对的集合。在各种语言中,这被实现为对象,记录,结构,字典,哈希表,键控列表或关联数组。
有序的值列表。在大多数语言中,这被实现为数组,向量,列表或序列。
由于"foo"
不是上述内容,因此您收到错误消息。为了进一步具体,它看看Ruby JSON Parser,文件说明:
要创建有效的JSON文档,您必须确保输出嵌入在JSON数组[]或JSON对象{}中。最简单的方法是将值放在Ruby Array或Hash实例中。
因此,您提到的“解决方法”实际上是使用JSON解析器解析字符串的正确方法。
其他信息:
在jsonlint.com和json.parser.online.fr上解析"\"foo\""
会引发错误,
解析["foo"]
会在两个站点上通过验证测试。