Как проверить пустую строку массива перед созданием объекта JSON в Java? - PullRequest
0 голосов
/ 25 марта 2019

Я получаю пустой массив в строке в качестве ответа от сервера и получаю ClassCastException при преобразовании его в JsonObject, потому что это пустой массив.Вот фрагмент кода.

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

, если я добавлю чек для сравнения "[]", например

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

или тамможет быть любой другой лучший способ сделать это.

Пожалуйста, руководство.

Спасибо,

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Вы можете использовать метод из семейства 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 объектов и безопасен в использовании.

0 голосов
/ 25 марта 2019

Попробуйте это

if(!errorMessage[0]==null)

Если ваш массив пуст в позиции 0, он возвращается нулевым, или если вы объявляете размер массива, когда объявляете, что это будет сделано:

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