如何检查一个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,并检查方法是否返回truefalse 。 你也可以

使用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"); }