Как проверить, существует ли ключ json?
Итак, я получаю некоторые значения JSON с сервера, но я не знаю, будет ли определенное поле или нет.
Так как:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited"
}
и иногда, там будет дополнительное поле, типа:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited",
"club":"somevalue"
}
Я хотел бы проверить, существует ли поле с именем "клуб", так что при разборе я не получу org.формат JSON.JSONException: нет значения для club
9 ответов:
класс 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:возвращает значение, сопоставленное по имени, если оно существует, принуждая его, если необходимый. Возвращает пустую строку, если такое сопоставление не существует
можно использовать
haspublic 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'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)
лучший способ, вместо использования условных типа:
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)и делай свое дело.счастливого обучения!
Comments