因此,我从服务器获取了一些JSON值,但我不知道是否会有特定的字段。
所以喜欢:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited"
}
有时,会有一个额外的字段,如:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited",
"club":"somevalue"
}
我想检查名为“club”的字段是否存在,以便在解析时我不会得到 org.json.JSONException:没有俱乐部的价值
答案 0 :(得分:227)
JSONObject类有一个名为“has”的方法:
http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)
如果此对象具有name的映射,则返回true。映射可能为NULL。
答案 1 :(得分:133)
您可以通过这种方式检查'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"));
答案 2 :(得分:14)
您可以JSONObject#has
,提供key
作为输入,并检查该方法是返回true
还是false
。你也可以
使用optString
代替getString
:
返回按名称映射的值(如果存在),如果是则强制转换它 必要。如果不存在这样的映射,则返回空字符串
答案 3 :(得分:9)
您可以使用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
}
确定 JSONObject 是否包含 特定密钥 。
示例强>
<!doctype html>
<html>
<head>
<title>Google maps - multiple markers example</title>
<script type='text/javascript'>
/* data, derived from a db call and written as a json object */
var json={
"results":{
"0":{"name":"Kinnettles","lat":"56.61543329027024","lng":"-2.9266123065796137"},
"1":{"name":"Nathro","lat":"56.793249595719956","lng":"-2.8623101711273193"},
"2":{"name":"Ark Hill","lat":"56.57065514278748","lng":"-3.0511732892761074"},
"3":{"name":"Dodd Hill","lat":"56.54251020079966","lng":"-2.9051538305053555"},
"4":{"name":"Govals","lat":"56.582320876071854","lng":"-2.9509015874633633"},
"5":{"name":"Carsegownie","lat":"56.67951330362271","lng":"-2.8062983350524746"},
"6":{"name":"Frawney","lat":"56.56806620951482","lng":"-2.9501720266113125"},
"7":{"name":"North Tarbrax","lat":"56.57144715546598","lng":"-2.92476614282225"},
"8":{"name":"The Carrach","lat":"56.6938437674986","lng":"-3.131382067657455"},
"9":{"name":"Glaxo","lat":"56.70431711148748","lng":"-2.4660869436035"}
}
};
/* callback function */
function initialise(){
var bounds = new google.maps.LatLngBounds();
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map( document.getElementById('map'), {
zoom:10,
center: { lat: 56.6154, lng: -2.9266 }
});
/* process json data and add a marker for each location */
var data=json.results;
for( var o in data ){
var latlng=new google.maps.LatLng( data[o].lat, data[o].lng );
var title=data[o].name;
var marker = new google.maps.Marker({
position: latlng,
map: map,
title: title,
content:title
});
google.maps.event.addListener(marker, 'click', function(event){
infoWindow.setContent( this.content );
infoWindow.open(map, this);
}.bind(marker));
bounds.extend( latlng );
}
map.fitBounds(bounds);
}
</script>
<script async defer src='//maps.googleapis.com/maps/api/js?key=AIzaSyA157quXbUlHHgm4wJJxzD49MivKgPSil8&callback=initialise' type='text/javascript'></script>
<style type='text/css'>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map{
display:block;
box-sizing:border-box;
width:800px;
height:600px;
margin:1rem auto;
float:none;
border:3px solid black;
}
</style>
</head>
<body>
<div id='map'></div>
</body>
</html>
答案 4 :(得分:6)
在读取密钥之前,请在阅读之前检查它
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)
答案 5 :(得分:2)
试试这个
if(!jsonObj.isNull("club")){
jsonObj.getString("club");
}
答案 6 :(得分:2)
更好的方法,而不是使用条件:
if (json.has("club")) {
String club = json.getString("club"));
}
是简单地使用现有方法optString(),如下所示:
String club = json.optString("club);
如果密钥不存在,则optString(“key”)方法将返回一个空字符串,因此不会抛出异常。
答案 7 :(得分:1)
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;
适用于所有当前浏览器。
答案 8 :(得分:1)
尝试一下:
let json=yourJson
if(json.hasOwnProperty(yourKey)){
value=json[yourKey]
}
答案 9 :(得分:0)
我只是添加另一件事,如果您只想检查是否在JSONObject中创建了任何内容,则可以使用 length (),因为默认情况下,当初始化JSONObject且没有密钥时插入时,它只有大括号{}
,并且使用有(字符串键)没有任何意义。
因此您可以直接写if (jsonObject.length() > 0)
来做您的事情。
学习愉快!
答案 10 :(得分:0)
您可以尝试检查密钥是否存在:
JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
object.get("key");
//etc. etc.
}
答案 11 :(得分:0)
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
}
答案 12 :(得分:0)
您可以使用 JsonNode#hasNonNull(String fieldName),它将 has 方法和验证值混合为 null 值是否