Android 检查json数组中是否存在格式错误的对象

Android 检查json数组中是否存在格式错误的对象,android,json,gson,Android,Json,Gson,我试图将对象列表放入一个数组中,当对象都很好时,它可以正常工作,但当我得到4000条记录时,很难看到哪一条是错误的。如何检查字符串的哪部分格式不正确或跳过该特定对象。。如果我能指出它的格式不正确的地方会更好,但正如我所说的,有4000条记录,这个错误对我帮助不大。这是我的密码: JsonParser parser = new JsonParser(); JsonReader jreader = new JsonReader(new StringReader(result)); jreader.s

我试图将对象列表放入一个数组中,当对象都很好时,它可以正常工作,但当我得到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);

只需使用
try/catch
construct。这就是它的意义所在

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
}
JsonParser=newjsonparser();
JsonReader jreader=新的JsonReader(新的StringReader(结果));
jreader.setLenient(真);
试一试{
JsonElement elem=parser.parse(reader);//抛出格式错误的json错误
JsonArray contacts=elem.getAsJsonArray();
Gson转换器=新的Gson();
ContactObject obj=null;

键入cons=带有转义参数的新TypeToken方法(PHP 5.3或更新版本)。只需使用
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
}
JsonParser=newjsonparser();
JsonReader jreader=新的JsonReader(新的StringReader(结果));
jreader.setLenient(真);
试一试{
JsonElement elem=parser.parse(reader);//抛出格式错误的json错误
JsonArray contacts=elem.getAsJsonArray();
Gson转换器=新的Gson();
ContactObject obj=null;

Type cons=new TypeToken方法,带有用于转义(PHP 5.3或更新版本)其内容的参数。

当来自服务器的json无效时,我们肯定会遇到此错误

使用try-catch无法帮助您了解服务器代码中的错误,因此,要了解确切的问题,您只需遵循以下步骤:

1) 我复制了所有的json,并在在线json验证工具中对其进行了验证

例如:

  • 这两种工具都非常有效,并且会为您指出确切的错误。如果您自己是服务器端开发人员,那么您可以轻松地修复它,否则请您的可怜的开发人员修复它


    希望这是详细的答案。

    当来自服务器的json无效时,我们肯定会遇到此错误

    使用try-catch无法帮助您了解服务器代码中的错误,因此,要了解确切的问题,您只需遵循以下步骤:

    1) 我复制了所有的json,并在在线json验证工具中对其进行了验证

    例如:

  • 这两种工具都非常有效,并且会为您指出确切的错误。如果您自己是服务器端开发人员,那么您可以轻松地修复它,否则请您的可怜的开发人员修复它


    希望这是详细的答案。

    为什么不直接使用
    JSONObject
    JSONArray
    自己循环呢?为什么不直接使用
    JSONObject
    JSONArray
    自己循环呢?所以没有办法确定是什么导致了错误的对象?-问题是我无法操作se服务器代码,我是从外部API获得的,我怀疑他们是否会更改它。好吧,你可以将其锁定。异常告诉错误发生的位置:
    第1行第38670列的未终止对象。
    。基本上整个JSON是一行,错误发生在第38671个字符中。根据错误的不同,它也可能是一个错误在您使用的JSON库中。我不知道您使用的是哪个JSON库,但如果您使用出现在异常点的JSON对象更新您的问题,我对
    google gson
    @有很好的体验(请参阅上面的评论)然后,人们可能会告诉您这是您库中的一个bug,还是服务器正在创建无效的JSON结果。我使用的是gson,问题是异常并没有像您在上面的异常中看到的那样向我显示JSON。它显示的是位置。您的整个JSON数据都在一个字符串中。
    JsonReader jreader=new JsonReader(new StringReader(result));
    变量
    result
    包含包含整个JSON的字符串。您只需将其打印出来(或另存为文本文件)查看您选择的文本编辑器中的38670位置。因此,无法确定导致错误对象的原因?-问题是我无法操作服务器代码,我是从外部API获得的,我怀疑他们会更改它。您可以确定它。异常告诉错误发生的位置:
    Unterminated object at第1行第38670列
    。基本上整个JSON是一行,错误发生在38671字符中。根据错误的不同,它也可能是您使用的JSON库中的错误。我不知道您使用的是哪个JSON库,但如果您使用JSON o更新您的问题,我对
    谷歌gson
    @有很好的经验出现在异常点的对象(参见上面的注释)然后,人们可能会告诉您这是您库中的一个bug,还是服务器正在创建无效的JSON结果。我使用的是gson,问题是异常并没有像您在上面的异常中看到的那样向我显示JSON。它显示的是位置。您的整个JSON数据都在一个字符串中。
    JsonReader jreader=new JsonReader(new StringReader(result));
    result
    变量包含包含整个JSON的字符串。您只需将其打印出来(或另存为文本文件),然后查看所选文本编辑器中的38670位置。