Java 如何检查JSON密钥是否存在?

Java 如何检查JSON密钥是否存在?,java,android,json,Java,Android,Json,因此,我从服务器上获得了一些JSON值,但我不知道是否会有一个特定的字段 就像: { "regatta_name":"ProbaRegatta", "country":"Congo", "status":"invited" } 有时,会有一个额外的字段,如: { "regatta_name":"ProbaRegatta",

因此,我从服务器上获得了一些JSON值,但我不知道是否会有一个特定的字段

就像:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}
有时,会有一个额外的字段,如:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}
我想检查名为“club”的字段是否存在,以便在解析时不会得到

org.json.JSONException:俱乐部没有价值

您可以
JSONObject#has
,提供
键作为输入,并检查该方法是否返回
true
false
。你也可以

使用
optString
而不是
getString

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


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

如果此对象具有名称映射,则返回true。映射可能为空

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

if (json.has("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
函数链接下方的官方文档


您可以通过这种方式进行检查,其中“HAS”-如果此对象具有名称映射,则返回true。映射可能为空

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

if (json.has("club")) {
   String club = json.getString("club"));
}
您还可以使用“isNull”进行检查—如果此对象没有 名称的映射,或者如果其具有值为NULL的映射

试试这个

if(!jsonObj.isNull("club")){
    jsonObj.getString("club");
}

您可以使用
has

public boolean has(String key)
确定是否包含特定键

示例

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 (json.has("club")) {
    String club = json.getString("club"));
 }
就是简单地使用现有的方法optString(),如下所示:

String club = json.optString("club);
如果键不存在,optString(“key”)方法将返回一个空字符串,因此不会抛出异常

I used hasOwnProperty('club')

var myobj = { "regatta_name":"ProbaRegatta",
    "country":"Congo",
    "status":"invited"
 };

 if ( myobj.hasOwnProperty("club"))
     // do something with club (will be false with above data)
     var data = myobj.club;
 if ( myobj.hasOwnProperty("status"))
     // do something with the status field. (will be true with above ..)
     var data = myobj.status;

可以在所有当前浏览器中使用。

我只是在添加另一个东西,如果您只是想检查是否在JSONObject中创建了任何东西,您可以使用长度(),因为默认情况下,当初始化JSONObject且未插入任何键时,它只有空大括号
{}
,并且使用具有(字符串键)没有任何意义

因此,您可以直接编写
if(jsonObject.length()>0)
并执行您的操作

学习愉快

试试这个:

let json=yourJson

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

您可以尝试此项检查密钥是否存在:

JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
  object.get("key");
  //etc. etc.
}

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

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

File jsonInputFile=new文件(“jsonFile.json”);
InputStream is=新文件InputStream(jsonInputFile);
JsonReader=Json.createReader(is);
JsonObject frameObj=reader.readObject();
reader.close();
如果frameObj.containsKey(“人员”){
//做事
}

您可以使用JsonNode#hasNonNull(String fieldName),它混合了has方法和验证它是否为null

如果(jsonObject.getString(“club”)!=null){//在此处获取值}否,在异常处理代码停止时,并且进一步的解析操作不会运行。@SoftwareSainath不起作用,仍然得到异常。String clubvalue=“”;try(clubvalue=jsonobject.getString(“club”);}catch(异常e){}虽然此方法可能对其他人有用,但如果该值存在,则不会返回。如果
getString
将返回空字符串,
optString
也将返回空字符串。假设这样,您就会认为该属性在OP的情况下不可用。@Blackbelt您有此的来源吗?
>isNull实际上是用于检查映射是否为null,而不是用于检查json成员的可用性。如果键来自
Integer
type怎么办?@Eido95使用
Integer
作为键听起来很糟糕。json应该带有字符串键和您需要的任何值。@Eido95,我相信整数总是有一个字符串值,每次声明一个整数时,都必须用一个值对其进行初始化。您使用的是哪个json库,您可以提供一个简单的json smart或json示例吗-simple@samuelowinojson是包含您的object的变量,在您回答之前,我不知道它的存在。非常感谢。