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

How to check empty array string before creating json object in java?

我在字符串中得到一个空数组作为服务器的响应,并且在将它转换为 JsonObject 时得到 ClassCastException,因为它是一个空数组。这是代码片段。

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);
}

这里是isJson方法

public static boolean isJson(String Json) {
        try {
            new JSONObject(Json);
        } catch (JSONException ex) {
            try {
                new JSONArray(Json);
            } catch (JSONException ex1) {
                return false;
            }
        }
        return true;
    }

我应该添加一个支票来比较“[]”吗

if(isJson(errorMessage) && !errorMessage.equals("[]"))

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

请指导。

谢谢,

试试这个

if(!errorMessage[0]==null)

如果你的数组在位置0为空,则返回null,或者你在声明完成时声明数组大小:

 if(!errorMessage[0]=="")

您可以使用 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 对象的根类型,可以安全使用。