JsonReaderを使用してjsonを解析しようとしています。解析中に、アプリがクラッシュする2つのシナリオに遭遇しました。1)。JsonArrayに別のJsonArrayのセットが含まれていて、そのうちの1つがnullである場合。結果が配列で、さらに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にオブジェクトのセットがあり、オブジェクトの1つがnullの場合。同じ例を添付しました。ここに、21個のオブジェクトを含み、そのうち1個がnullであるJsonArrayとしてソースがあります。
"source": [(21)
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
{...},-
null
]
a内のいくつかの個々の要素がnullであるかどうかを確認することができます
reader.peek()== JsonToken.NULL
Logcatのエラー出力:
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();
}
}