it-swarm.com.ru

Как проверить, существует ли ключ JSON?

Итак, я получаю некоторые значения JSON с сервера, но я не знаю, будет ли определенное поле или нет.

Так вроде:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}

И иногда будет дополнительное поле, например:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}

Я хотел бы проверить, существует ли поле с именем «club», чтобы при разборе я не получал org.json.JSONException: нет значения для club

120
Adam Varhegyi

У класса JSONObject есть метод с именем "has":

http://developer.Android.com/reference/org/json/JSONObject.html#has(Java.lang.String)

Возвращает true, если у этого объекта есть сопоставление имени. Отображение может быть NULL.

212
PX Developer

Вы можете проверить этот способ, где '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"));
127
Nirali

вы можете JSONObject#has, предоставив key в качестве входных данных и проверить, возвращает ли метод true или false. Вы могли бы также

используйте optString вместо getString:

Возвращает значение, отображаемое по имени, если оно существует, принудительно, если необходимо. Возвращает пустую строку, если такого отображения не существует

12
Blackbelt

Вы можете использовать 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
}
8
IntelliJ Amiya

как раз перед прочтением ключа проверьте его как перед прочтением

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)

6
Stack Overflow User

Попробуй это

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

Лучший способ, вместо использования условного типа:

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

это просто использовать существующий метод optString (), например:

String club = json.optString("club);

метод optString ("key") вернет пустую строку, если ключ не существует и, следовательно, не вызовет исключение.

2
fuzzKitty

Я просто добавляю еще одну вещь. В случае, если вы просто хотите проверить, создано ли что-либо в JSONObject или нет, вы можете использовать length (), потому что по умолчанию, когда JSONObject инициализируется и ключ не вставляется, он просто имеет пустой фигурные скобки {} и использование имеет (строковый ключ) не имеет никакого смысла.

Таким образом, вы можете напрямую написать if (jsonObject.length() > 0) и делать свои вещи.

Счастливого обучения!

0
Gurinder
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;

работает во всех текущих браузерах.

0
cdturner