我一直在使用JSONParser的解析方法,没有太多问题。
最近,我决定关注我看到的一则弃用通知。它建议我使用parseStrict或parseLenient。
因此,我决定尝试一下parseStrict。
我声明了一个json字符串...
String jsonstr = "{value : [12,34],[56,78]]}";...I确认它可以和老的parse一起工作……
JSONValue jsv = JSONParser.parse(jsonstr);...and警告窗口告诉我jsv的值是这样的:
{"value" : [12,34],[56,78]]}然后我在相同的字符串上使用了parseStrict:
JSONValue jsv = JSONParser.parseStrict(jsonstr);但是我的GWT应用程序崩溃了,出现了一个异常!
使用parseStrict (vs parse)有哪些要求?它怎么会被这么简单的json字符串绊倒呢?
Uncaught exception escaped
com.google.gwt.event.shared.UmbrellaException: One or more exceptions caught, see full set in UmbrellaException#getCauses
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129)
......
at com.google.gwt.json.client.JSONParser.evaluate(JSONParser.java)
at com.google.gwt.json.client.JSONParser.parse(JSONParser.java:218)
at com.google.gwt.json.client.JSONParser.parseStrict(JSONParser.java:87)发布于 2011-09-06 03:49:39
从最严格的意义上讲,您提供的JSON不是严格正确的。
JSON键值应该用双引号as described in the JSON spec括起来,所以您的示例JSON应该如下所示:
String jsonstr = "{\"value\" : [[12,34],[56,78]]}";此外,您的大括号([])似乎不匹配(我也更正了这一点)。
总之,可能是缺少匹配的大括号,也可能是缺少双引号。为了找出答案,您可以将有问题的代码包装在try / catch块中,并按照堆栈跟踪的建议执行操作。也就是说,在异常上调用getCauses方法:
try {
JSONValue jsv = JSONParser.parseStrict(jsonstr);
} catch (UmbrellaException e) {
Set causes = e.getCauses();
//actually find out what the problem was
}注意:JSONParser.parse只是 ,所以在使用它时要小心!
https://stackoverflow.com/questions/7312134
复制相似问题