Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果json数组为空,则Gson getAsString()将失败_Java_Json_Gson - Fatal编程技术网

Java 如果json数组为空,则Gson getAsString()将失败

Java 如果json数组为空,则Gson getAsString()将失败,java,json,gson,Java,Json,Gson,我使用Java中的Json库Gson将Json字符串解析为CSV文件。我的一些json字段是空的,因此我必须检查并添加一个空字符串。我的json字符串中的一些字段是数组,有些字段是空的。但是,当这些数组为空时,Gson中的getAsString方法将失败,并出现illeagStateException。以下是一个可运行的示例: import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.goo

我使用Java中的Json库Gson将Json字符串解析为CSV文件。我的一些json字段是空的,因此我必须检查并添加一个空字符串。我的json字符串中的一些字段是数组,有些字段是空的。但是,当这些数组为空时,Gson中的getAsString方法将失败,并出现illeagStateException。以下是一个可运行的示例:

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

JsonObject message = new JsonParser().parse("{\"id\":null,\"text\":\"test\",\"types\":[]}").getAsJsonObject();
JsonElement element = message.get("types"); //now this is "[]"
String jsonElementAsString= element.isJsonNull() ? "" : element.getAsString(); //Here exception is thrown.
我已经在检查json是否为空。这里有什么好的解决办法?为了提高执行时间,我希望避免增加太多的混乱。当然,我可以用try-catch来包装它,但这很昂贵。

因为我们知道类型是一个数组,所以最好的方法是,首先检查类型存在于JsonObject中

然后将类型获取为JsonArray

然后使用forEach,这样就不必关心数组是否也是空的

typesArray.forEach(element->System.out.println(element));

可以尝试gson.fromJsonstring、Map.classand,我不知道为什么要尝试将JsonArray作为字符串?谢谢,这似乎很有效。尽管如此,当我要解析几十万行JSON时,即使是一个额外的检查也会累加起来
JsonArray typesArray = message.getAsJsonArray("types");
typesArray.forEach(element->System.out.println(element));