我使用大量JSON进行数据处理。最近在进行此类工作时,我遇到了一个奇怪的问题,最终出现在OEM中。(内存不足)。
String myInData = "[one,two,three,";
JSONArray myArray = new JSONArray(myInData);
如果运行上面的代码,它将超出堆空间(如果应用程序在自动GC中运行)。
在某些情况下,我不能指望数据格式正确,我无法检查每个键值是否格式正确。有没有办法检查JSONArray字符串是否正确有效?
答案 0 :(得分:0)
我无法重现这一点。
当我针对来自GoogleCode的最新org.json JAR运行以下内容时,我收到一个抱怨语法错误的JSON异常。没有OOME。
[steve@newbox tmp]$ cat Test.java
import org.json.*;
public class Test {
public static void main(String[] args) throws Exception {
String myInData = "[one,two,three,";
JSONArray myArray = new JSONArray(myInData);
}
}
[steve@newbox tmp]$ javac -cp org.json-20120521.jar Test.java
[steve@newbox tmp]$ java -cp org.json-20120521.jar:. Test
Exception in thread "main" org.json.JSONException: Missing value at 15 [character 16 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
at org.json.JSONTokener.nextValue(JSONTokener.java:387)
at org.json.JSONArray.<init>(JSONArray.java:116)
at org.json.JSONArray.<init>(JSONArray.java:144)
at Test.main(Test.java:6)
[steve@newbox tmp]$
结论:要么你有一个“狡猾的”JAR文件,要么你的代码中的OOME的实际原因是别的;例如在尝试(并且失败)解析JSON之后发生的事情。