我试图将一个对象列表放到一个数组中,当对象都很好时它可以正常工作,但是当我得到4000条记录时很难看出哪一个是错误的。我如何检查字符串的哪个部分格式错误或跳过该特定对象..如果我能指出它变得格格不入的地方会更好但是就像我说的那样,有4000条记录错误对我没什么帮助。这是我的代码:
JsonParser parser = new JsonParser();
JsonReader jreader = new JsonReader(new StringReader(result));
jreader.setLenient(true);
JsonElement elem = parser.parse(reader); //throws malformed json error
JsonArray contacts = elem.getAsJsonArray();
Gson converter = new Gson();
ContactObject obj = null;
Type cons = new TypeToken<ArrayList<Contact>>(){}.getType();
temp = converter.fromJson(contacts, cons);
这是错误:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 38670
at com.google.gson.internal.Streams.parse(Streams.java:56)
at com.google.gson.JsonParser.parse(JsonParser.java:84)
at com.android.companya.ContactServer$APICalls.doInBackground(APIServer.java:737)
at com.android.companya.ContactServer$APICalls.doInBackground(APIServer.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 38670
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1310)
at com.google.gson.stream.JsonReader.nextInObject(JsonReader.java:722)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:382)
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:349)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:657)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:650)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:633)
at com.google.gson.internal.Streams.parse(Streams.java:44)
答案 0 :(得分:2)
当来自服务器的json无效时,我们肯定会收到此错误。
使用try catch不会帮助您解决服务器代码中的错误,因此,为了捕获确切的问题,您只需按照以下步骤操作:
1)我复制了所有json并在在线json验证工具
中验证了它例如:
如果您自己是服务器端开发人员,那么这两个工具都非常高效,并指出您确切的错误,然后您可以轻松修复它,否则请告诉您的可怜开发人员修复它。
希望这是详细的答案。答案 1 :(得分:1)
只需使用try/catch
构造。这就是它的意思。
JsonParser parser = new JsonParser();
JsonReader jreader = new JsonReader(new StringReader(result));
jreader.setLenient(true);
try {
JsonElement elem = parser.parse(reader); //throws malformed json error
JsonArray contacts = elem.getAsJsonArray();
Gson converter = new Gson();
ContactObject obj = null;
Type cons = new TypeToken<ArrayList<Contact>>(){}.getType();
temp = converter.fromJson(contacts, cons);
} catch(JsonSyntaxException ex) {
// Inform then user that the the Json data contains invalid syntax
}
此外,您不能跳过格式错误的对象。要么整个结果有效,要么不有效。您必须在创建Json字符串的服务器上修复此问题。正确地逃避价值是很重要的。在PHP中,你有json_encode(...)
方法,带有用于转义的参数(PHP 5.3或更新版本)它的内容。