Android Json и нулевые значения

Как определить, когда значение json равно null? например: [{ "username": null}, { "username": "null" }]

Первый случай представляет собой неиспользуемое имя пользователя, а второй - с именем "null" . Но если вы попытаетесь восстановить их, оба значения приведут к строке "null"

JSONObject json = new JSONObject("{\"hello\":null}");
json.put("bye", JSONObject.NULL);
Log.e("LOG", json.toString());
Log.e("LOG", "hello="+json.getString("hello") + " is null? "
                + (json.getString("hello") == null));
Log.e("LOG", "bye="+json.getString("bye") + " is null? "
                + (json.getString("bye") == null));

Выход журнала

{"hello":"null","bye":null}
hello=null is null? false
bye=null is null? false

Ответ 2

Поскольку JSONObject # getString возвращает значение, если данный ключ существует, по определению он не является нулевым. Именно по этой причине существует JSONObject.NULL: для представления нулевого значения JSON.

json.getString("hello").equals(JSONObject.NULL); // should be false
json.getString("bye").equals(JSONObject.NULL); // should be true

Ответ 3

Для android он вызывает JSONException, если такое сопоставление не существует. Поэтому вы не можете напрямую вызвать этот метод.

json.getString("bye")

если данные могут быть пустыми (может не существовать ключ), попробуйте

json.optString("bye","callback string");

или

json.optString("bye");

вместо.

В вашем демо-коде

JSONObject json = new JSONObject("{\"hello\":null}");
json.getString("hello");

это вы получаете, это String "null" не null.

использовать ваш звук

if(json.isNull("hello")) {
    helloStr = null;
} else {
    helloStr = json.getString("hello");
}

Ответ 4

сначала проверьте с помощью isNull().... если не работает, тогда попробуйте belows

а также у вас есть JSONObject.NULL для проверки нулевого значения...

 if ((resultObject.has("username")
    && null != resultObject.getString("username")
    && resultObject.getString("username").trim().length() != 0)
      {
               //not null
        }

и в вашем случае также проверьте resultObject.getString("username").trim().eqauls("null")

Ответ 5

Если вы должны сначала разобрать json и обработать объект, попробуйте это

Parser

Object data = json.get("username");

Обработчик

if (data instanceof Integer || data instanceof Double || data instanceof Long) {
     // handle number ;
} else if (data instanceof String) {
     // hanle string;               
} else if (data == JSONObject.NULL) {
     // hanle null;                 
}

Ответ 6

Вот вспомогательный метод, который я использую, чтобы я мог получить строки JSON только с одной строкой кода:

public String getJsonString(JSONObject jso, String field) {
    if(jso.isNull(field))
        return null;
    else
        try {
            return jso.getString(field);
        }
        catch(Exception ex) {
            LogHelper.e("model", "Error parsing value");
            return null;
        }
}

а затем что-то вроде этого:

String mFirstName = getJsonString(jsonObject, "first_name");

предоставит вам ваше строковое значение или безопасно установите для вашей строковой переменной значение null. Я использую Гсона всякий раз, когда могу, чтобы избежать таких ловушек. По-моему, он лучше меняет нулевые значения.