如何在 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
对象的根类型,可以安全使用。
我在字符串中得到一个空数组作为服务器的响应,并且在将它转换为 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
对象的根类型,可以安全使用。