我从服务器得到一个字符串中的空数组,并在将其转换为JsonObject时得到ClassCastException,因为它是一个空数组。这是代码段。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ExecuteResponse xmlns="http://service.com/integration/">
<ExecuteResult xsi:type="TaskResponse">
<Task>
<Id>12367</Id>
<ConcurrencyId>1</ConcurrencyId>
<Number>KLMNOU</Number>
<TypeCategory>Request</TypeCategory>
</Task>
</ExecuteResult>
</ExecuteResponse>
</soap:Body>
</soap:Envelope>
这是isJson方法
final String errorMessage = IOUtils.toString(errorStream); // response is "[]"
if (isJson(errorMessage)) {
final JsonObject jsonResult = new Gson().fromJson(errorMessage, JsonObject.class);
throw new IOException(jsonResult.get("error").toString());
} else {
throw new IOException("Json response is" + errorMessage);
}
我应该添加支票来比较“ []”吗
public static boolean isJson(String Json) {
try {
new JSONObject(Json);
} catch (JSONException ex) {
try {
new JSONArray(Json);
} catch (JSONException ex1) {
return false;
}
}
return true;
}
或者还有其他更好的方法。
请指导。
谢谢
答案 0 :(得分:1)
您可以使用is*
系列的方法:
Gson gson = new GsonBuilder().create();
String[] jsons = {"[]", "[ ]", "[\r\n]", "{}", "{\"error\":\"Internal error\"}"};
for (String json : jsons) {
JsonElement root = gson.fromJson(json, JsonElement.class);
if (root.isJsonObject()) {
JsonElement error = root.getAsJsonObject().get("error");
System.out.println(error);
}
}
打印:
null
"Internal error"
没有必要检查"[]"
字符串,因为括号之间可能有许多不同的白色字符。 JsonElement
是所有JSON
对象的根类型,可以安全使用。
答案 1 :(得分:0)
尝试一下
if(!errorMessage[0]==null)
如果数组在位置0处为空,则返回null,或者在声明要完成时声明数组大小:
if(!errorMessage[0]=="")