Android Json和空值

如何检测何时JSON值为空? 例如: [{“username”:null},{“username”:“null”}]

第一种情况表示一个未出现的用户名,第二种情况表示一个名为“null”的用户。 但是,如果您尝试检索它们,则两个值都会导致string“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”不为空。

你应该使用

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

首先检查isNull() ….如果不能工作,然后尝试下面

还有你有JSONObject.NULL检查空值…

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

并在你的情况也检查resultObject.getString("username").trim().eqauls("null")

如果你必须先parsingjson并稍后处理对象,那就试试这个

分析器

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

下面是我使用的一个帮助器方法,这样我就可以只用一行代码来获取JSONstring:

 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"); 

会给你你的string值或安全地设置你的stringvariables为null。 我尽可能地使用Gson来避免像这样的陷阱。 它在我看来处理空值更好。