如何检查一个JSON键是否存在?
所以,我从服务器得到一些JSON值,但是我不知道是否会有特定的字段。
如此:
{ "regatta_name":"ProbaRegatta", "country":"Congo", "status":"invited" }
有时,会有一个额外的领域,如:
{ "regatta_name":"ProbaRegatta", "country":"Congo", "status":"invited", "club":"somevalue" }
我想检查是否存在名为“俱乐部”的字段,以便在parsing时,我不会得到org.json.JSONException:俱乐部没有价值
JSONObject类有一个名为“has”的方法:
http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String);
如果此对象具有名称映射,则返回true。 映射可能是NULL。
你可以用这种方式检查'HAS' – 如果这个对象有一个名字映射,则返回true。 映射可能是NULL。
if (json.has("status")) { String status = json.getString("status")); } if (json.has("club")) { String club = json.getString("club")); }
你也可以使用'isNull'来检查 – 如果这个对象没有名称映射或者映射的值是NULL,则返回true。
if (!json.isNull("club")) String club = json.getString("club"));
你可以JSONObject#has
提供key
作为input,并检查方法是否返回true
或false
。 你也可以
使用optString
而不是getString
:
如果存在,则返回按名称映射的值,必要时强制使用该值。 如果不存在这样的映射,则返回空string
只是在读取之前检查它是否像以前一样阅读
JSONObject json_obj=new JSONObject(yourjsonstr); if(json_obj.isNull("club")) { //it's contain value to be read operation } else { //it's not contain key club or isnull so do this operation here }
isNull函数定义
Returns true if this object has no mapping for name or if it has a mapping whose value is NULL.
下面的官方文档链接为isNull
函数
http://developer.android.com/reference/org/json/JSONObject.html#isNull(java.lang.String);
你可以用has
public boolean has(String key)
确定JSONObject是否包含特定的键 。
例
JSONObject JsonObj = new JSONObject(Your_API_STRING); //JSONObject is an unordered collection of name/value pairs if (JsonObj.has("address")) { //Checking address Key Present or not String get_address = JsonObj .getString("address"); // Present Key } else { //Do Your Staff }
尝试这个
if(!jsonObj.isNull("club")){ jsonObj.getString("club"); }