如何在Java中创建json对象之前检查空数组字符串?

时间:2019-03-25 10:20:55

标签: java gson classcastexception

我从服务器得到一个字符串中的空数组,并在将其转换为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;
    }

或者还有其他更好的方法。

请指导。

谢谢

2 个答案:

答案 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]=="")