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来避免像这样的陷阱。 它在我看来处理空值更好。
- 检索项目的父项时出错:找不到与给定名称相匹配的资源'android:TextAppearance.Material.Widget.Button.Borderless.Colored'
- 如何将onClick事件传递给它的父母在Android上?
- 具有上一页和下一页边界的ViewPager
- android应用程序之间的通信
- 如何在Android中播放铃声/闹钟声音
- Activity在Android上重新启动
- Android如何使用Environment.getExternalStorageDirectory()
- Android:要为整个应用程序设置自定义字体,而不是运行时
- Android中的@SuppressWarnings(“deprecation”)和(“unused”)是什么?