我从服务器得到一些JSON值,但我不知道是否会有一个特定的字段。

就像:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}

有时,会有一个额外的字段,比如:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}

我想检查名为“俱乐部”的字段是否存在,以便在解析时我不会得到

jsonexception:没有club的值


当前回答

你可以使用jsonnode# hasNonNull(String fieldName),它混合了has方法和验证,如果它是一个空值或不是

其他回答

你可以这样检查,'HAS' -如果该对象有name的映射,则返回true。映射可能是NULL。

if (json.has("status")) {
   String status = json.getString("status"));
}

if (json.has("club")) {
   String club = json.getString("club"));
}

你也可以使用'isNull'检查-如果该对象没有返回true 如果它有一个值为NULL的映射。

if (!json.isNull("club"))
    String club = json.getString("club"));

在读取键之前检查一下,就像在读取之前一样

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(以)

Json有一个名为containsKey()的方法。

你可以使用它来检查某个键是否包含在Json集中。

File jsonInputFile = new File("jsonFile.json"); 
InputStream is = new FileInputStream(jsonInputFile);
JsonReader reader = Json.createReader(is);
JsonObject frameObj = reader.readObject();
reader.close();

if frameObj.containsKey("person") {
      //Do stuff
}

你可以用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
}

试试这个:

let json=yourJson

if(json.hasOwnProperty(yourKey)){
    value=json[yourKey]
}