Ответ 1
Попробуйте с json.isNull( "field-name" )
.
Ссылка: http://developer.android.com/reference/org/json/JSONObject.html#isNull%28java.lang.String%29
Как определить, когда значение 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
Попробуйте с json.isNull( "field-name" )
.
Ссылка: http://developer.android.com/reference/org/json/JSONObject.html#isNull%28java.lang.String%29
Поскольку JSONObject # getString возвращает значение, если данный ключ существует, по определению он не является нулевым. Именно по этой причине существует JSONObject.NULL: для представления нулевого значения JSON.
json.getString("hello").equals(JSONObject.NULL); // should be false
json.getString("bye").equals(JSONObject.NULL); // should be true
Для 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");
}
сначала проверьте с помощью 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")
Если вы должны сначала разобрать 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;
}
Вот вспомогательный метод, который я использую, чтобы я мог получить строки 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. Я использую Гсона всякий раз, когда могу, чтобы избежать таких ловушек. По-моему, он лучше меняет нулевые значения.