如何检查json密钥是否存在?

Ada*_*gyi 144 java android json

所以,我从服务器获取了一些JSON值,但我不知道是否会有特定的字段.

所以喜欢:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}
Run Code Online (Sandbox Code Playgroud)

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

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}
Run Code Online (Sandbox Code Playgroud)

我想检查名为"club"的字段是否存在,以便在解析时我不会得到org.json.JSONException:没有俱乐部的价值

PX *_*per 247

JSONObject类有一个名为"has"的方法:

http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

如果此对象具有name的映射,则返回true.映射可以是NULL.

  • 因为"包含"太陈旧了?:) (26认同)
  • @ Eido95以"整数"作为关键听起来像是不好的做法.JSON应该是一个String键和一个你需要的值. (2认同)

Nir*_*ali 141

您可以通过这种方式检查'HAS' - 如果此对象具有name的映射,则返回true.映射可以是NULL.

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

if (json.has("club")) {
   String club = json.getString("club"));
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用'isNull'进行检查 - 如果此对象没有名称映射或者其值为NULL,则返回true.

if (!json.isNull("club"))
    String club = json.getString("club"));
Run Code Online (Sandbox Code Playgroud)

  • 您使用的是哪个 json 库,您能否为 json-smart 或 json-simple 提供一个简单的示例 (2认同)

Bla*_*elt 15

你可以JSONObject#has,提供key输入并检查方法是否返回truefalse.你也可以

optString而不是getString:

返回按名称映射的值(如果存在),必要时强制转换它.如果不存在此类映射,则返回空字符串


Sta*_*ser 9

在读取之前,请在阅读之前检查它

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
}
Run Code Online (Sandbox Code Playgroud)

isNull函数定义

Returns true if this object has no mapping for name or
if it has a mapping whose value is NULL. 
Run Code Online (Sandbox Code Playgroud)

以下官方文档链接isNull功能

http://developer.android.com/reference/org/json/JSONObject.html#isNull(java.lang.String)


Int*_*iya 9

您可以使用 has

public boolean has(String key)
Run Code Online (Sandbox Code Playgroud)

确定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
}
Run Code Online (Sandbox Code Playgroud)


fuz*_*tty 6

更好的方法,而不是使用条件,如:

if (json.has("club")) {
    String club = json.getString("club"));
 }
Run Code Online (Sandbox Code Playgroud)

就是简单地使用现有的方法 optString(),如下所示:

String club = json.optString("club);
Run Code Online (Sandbox Code Playgroud)

如果键不存在, optString("key") 方法将返回一个空字符串,因此不会抛出异常。