我一直在使用 的JSONParserparse 方法,没有遇到很多问题。
最近,我决定关注我一直看到的弃用通知。它建议我使用parseStrict或parseLenient。
所以,我决定尝试一下parseStrict。
我声明了一个 json 字符串...
String jsonstr = "{value : [12,34],[56,78]]}";
Run Code Online (Sandbox Code Playgroud)
...我确认它可以与好老的parse...一起使用
JSONValue jsv = JSONParser.parse(jsonstr);
Run Code Online (Sandbox Code Playgroud)
...警报窗口告诉我 jsv 的价值是这样的:
{"value" : [12,34],[56,78]]}
Run Code Online (Sandbox Code Playgroud)
parseStrict然后我在同一个字符串上使用:
JSONValue jsv = JSONParser.parseStrict(jsonstr);
Run Code Online (Sandbox Code Playgroud)
但我的 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)
Run Code Online (Sandbox Code Playgroud)
从最严格的意义上来说,您提供的 JSON 并不严格正确。
JSON 键值应使用双引号引起来,如 JSON 规范 中所述,因此您的示例 JSON 应如下所示:
String jsonstr = "{\"value\" : [[12,34],[56,78]]}";
Run Code Online (Sandbox Code Playgroud)
另外,您的大括号 ( ) 似乎[]不匹配(我也已更正)。
总之,可能是缺少匹配大括号,或者缺少双引号。要找出答案,您可以将有问题的代码包装在 try / catch 块中,并按照堆栈跟踪的建议进行操作。getCauses即,在异常上调用该方法:
try {
JSONValue jsv = JSONParser.parseStrict(jsonstr);
} catch (UmbrellaException e) {
Set causes = e.getCauses();
//actually find out what the problem was
}
Run Code Online (Sandbox Code Playgroud)
注意:JSONParser.parse仅在引擎盖下使用eval,所以使用时要小心!
| 归档时间: |
|
| 查看次数: |
3904 次 |
| 最近记录: |