Intereting Posts

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 

Solutions Collecting From Web of "Android Json и нулевые значения"

Попробуйте с 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.

Ваше использование shoud

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

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

А также у вас есть JSONObject.NULL чтобы проверить значение null …

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

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

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

синтаксический анализатор

 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. Я использую Gson всякий раз, когда могу, чтобы избежать таких ловушек. По-моему, он лучше меняет нулевые значения.