一个项目中用到了JSONKit,一切都好好的,今天在做一个新的功能的时候,发现爆出了下面的错误
Error Domain=JKErrorDomain Code=-1 “Unexpected token, wanted ‘{‘, ‘}’, ‘[‘, ‘]’, ‘,’, ‘:’, ‘true’, ‘false’, ‘null’, ‘“STRING”’, ‘NUMBER’.” UserInfo=0x7c3de10 {JKAtIndexKey=22, JKLineNumberKey=1, NSLocalizedDescription=Unexpected token, wanted ‘{‘, ‘}’, ‘[‘, ‘]’, ‘,’, ‘:’, ‘true’, ‘false’, ‘null’, ‘“STRING”’, ‘NUMBER’.}
看到这个错误,首先想到的是给出的JSON字符串不正确,于是查看接口给出的JSON字符串
1 {"success":true,"msg":'操作成功'}
怎么看这个字符串都是一个正确的JSON字符串,为了验证,还把这个字符串复制到Safari的控制台和Firefox的Firebug中验证,都工作好好好的。
给出JSON的网页源代码中也没发现不可见字符,这下纠结了。
后来,仔细和以前接口返回的字符串对比,发现唯一不同的是以前使用的是双引号,这个接口使用的是单引号,会不会是这个原因?
修改JSON为:
1 {"success":true,"msg":"操作成功"}
果然一切OK了,看来JSONKit不支持单引号。这是JSONKit的问题么?
在JSONKit的这个Issue中找到了原因 https://github.com/johnezang/JSONKit/issues/75
去JSON的官网看了下,发现有下面这句话
A value can be a string in double quotes, or a number, or true or false or null, or an object or an array. These structures can be nested.
原来双引号才是JSON的标准,单引号是不规范的,虽然我们平时用单引号很多时候都是工作正常的。