Ответ 1
Класс JSONObject имеет метод с именем "has":
http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)
Возвращает true, если этот объект имеет сопоставление для имени. Отображение может быть NULL.
Итак, я получаю некоторые значения JSON с сервера, но я не знаю, будет ли это конкретное поле или нет.
Итак, как:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited"
}
И иногда появляется дополнительное поле типа:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited",
"club":"somevalue"
}
Я хотел бы проверить, существует ли поле с именем "club", так что при разборе я не получу org.json.JSONException: значение для клуба
Класс JSONObject имеет метод с именем "has":
http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)
Возвращает true, если этот объект имеет сопоставление для имени. Отображение может быть NULL.
Вы можете проверить этот путь, где 'HAS' - возвращает 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#has
, предоставив вход key
и проверить, возвращает ли метод true
или false
. Вы также можете
используйте optString
вместо getString
:
Возвращает значение, отображаемое по имени, если оно существует, принудительное его, если необходимо. Возвращает пустую строку, если такое отображение не существует
Вы можете использовать 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
}
как раз перед тем, как прочитать ключ, проверьте, как и перед прочтением
JSONObject json_obj=new JSONObject(yourjsonstr);
if(!json_obj.isNull("club"))
{
//it contain value to be read operation
}
else
{
//it 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)
Попробуйте это
if(!jsonObj.isNull("club")){
jsonObj.getString("club");
}
Лучше, вместо использования условного типа:
if (json.has("club")) {
String club = json.getString("club"));
}
- просто использовать существующий метод optString(), например:
String club = json.optString("club);
метод optString ( "ключ" ) возвращает пустую строку, если ключ не существует и не будет поэтому вызывать исключение.
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;
работает во всех текущих браузерах.
Попробуйте это:
let json=yourJson
if(json.hasOwnProperty(yourKey)){
value=json[yourKey]
}
Я просто добавляю еще одну вещь. Если вы просто хотите проверить, создано ли что-либо в JSONObject или нет, вы можете использовать length(), потому что по умолчанию, когда JSONObject инициализируется и ключ не вставляется, он просто имеет пустые скобки {}
, а использование имеет(строковый ключ) не имеет никакого смысла.
Таким образом, вы можете напрямую написать if (jsonObject.length() > 0)
и заниматься своими делами.
Счастливого обучения!
Вы можете попробовать это, чтобы проверить, существует ключ или нет:
JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
object.get("key");
//etc. etc.
}
У 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
}