【问题标题】:How to check empty array string before creating json object in java?在java中创建json对象之前如何检查空数组字符串?
【发布时间】:2019-03-25 10:20:54
【问题描述】:

我在字符串中得到一个空数组作为来自服务器的响应并在转换它 JsonObject 时得到 ClassCastException,因为它是一个空数组。这是代码sn-p。

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("[]"))

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

请指导。

谢谢,

【问题讨论】:

  • 一个空的 json 数组应该仍然是一个 json 数组...如果你得到一个异常你能提供完整的 stacktracke 吗?
  • 您不应该将可能是数组或对象的东西强制转换为JsonObject。您应该将其转换为 JsonElement
  • 如果您有对应于该响应的 java POJO,那么您可以使用 com.fasterxml.jackson.databind.ObjectMapper 将 json 字符串直接映射到该对象。我每次都用那个。只是根据我的经验提出的建议。 :)
  • 检查 if(errorStream.length()==0){ // 做你的工作 }else{ // 做你的工作 }

标签: java gson classcastexception


【解决方案1】:

你可以使用is*family的方法:

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

【讨论】:

    【解决方案2】:

    试试这个

    if(!errorMessage[0]==null)
    

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

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

    【讨论】:

    • 请在您的代码中添加一些解释,以便其他人可以从中学习
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多