Java 如何检查JSON密钥是否存在?
因此,我从服务器上获得了一些JSON值,但我不知道是否会有一个特定的字段 就像:Java 如何检查JSON密钥是否存在?,java,android,json,Java,Android,Json,因此,我从服务器上获得了一些JSON值,但我不知道是否会有一个特定的字段 就像: { "regatta_name":"ProbaRegatta", "country":"Congo", "status":"invited" } 有时,会有一个额外的字段,如: { "regatta_name":"ProbaRegatta",
{ "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的变量,在您回答之前,我不知道它的存在。非常感谢。