我正在尝试使用JsonReader解析json。解析时,我遇到了 2 种应用程序崩溃的情况。1). 当 JsonArray 包含另一个 JsonArray 的集合,并且其中一个为空时。我给出了一个场景,其中结果是一个数组,其中还有 21 个数组,最后一个数组为 null。
"results": [(21)
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[...(5)],-
[(0)]
],
2). 当 JsonArray 中有一组对象,并且其中一个对象为空时。我已经附上了相同的示例。在这里,我有源代码作为我的 JsonArray,其中包含 21 个对象,其中 1 个为空。
"source": [(21)
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
null
]
我能够通过以下方式检查 a 中的某些单个元素何时为空
reader.peek()== JsonToken.NULL
日志猫中的错误输出:
02-04 16:10:02.425: E/AndroidRuntime(1203): FATAL EXCEPTION: pool-1-thread-2
02-04 16:10:02.425: E/AndroidRuntime(1203): java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NULL at line 1 column 327992
02-04 16:10:02.425: E/AndroidRuntime(1203): at com.google.gson.stream.JsonReader.expect(JsonReader.java:339)
02-04 16:10:02.425: E/AndroidRuntime(1203): at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322)
我不知道如何检查我要解析的没有名称的数组或对象是否为 Null。
编辑:
法典:
public ResultObject parse(){
try{
if(reader != null ){
resultObject = new ResultObject();
reader.beginObject();
Log.e("123", "inside try ");
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equalsIgnoreCase("id")) {
if(reader.peek()== JsonToken.NULL){
reader.skipValue();
id= 0;
Log.e("123", "parse result --------id----------" + id);
resultObject.setId(id);
}else{
id= reader.nextDouble();
Log.e("123", "parse result -------id----------" + id);
resultObject.setId(id);
}
} else {
Log.e("123", "skip value");
reader.skipValue();
}
}
reader.endObject();
}
}catch(IOException e){
e.printStackTrace();
}
return resultObject;
}
调用函数:
if (name.equalsIgnoreCase(SOURCE)) {
if(reader.peek()== JsonToken.NULL){
reader.skipValue();
} else {
resultObjectList = new ArrayList();
resultObject = new ResultObject();
reader.beginArray();
while(reader.hasNext()){
resultObject =new ResultJsonUtil(reader).parse();
if(resultObject!=null){
resultObjectList.add(resultObject);
}
}
reader.endArray();
}
}
您的代码似乎在reader.beginObject();
崩溃。由于没有对象,Gson 会引发异常。
如果您不确定接下来会发生什么,您可以使用peek
进行测试
返回下一个令牌的类型而不使用它。
然后,您可以根据检索到的JsonToken
调用正确的读取器方法
if (reader.peek() != JsonToken.BEGIN_OBJECT) {
// do something
} else {
// parse object
resultObject = new ResultObject();
reader.beginObject();
...
}