it-swarm.dev

كيفية التحقق من وجود مفتاح json؟

لذا ، أحصل على بعض قيم JSON من الخادم ، لكنني لا أعرف ما إذا كان سيكون هناك حقل معين أم لا.

مثل ذلك:

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

وفي بعض الأحيان ، سيكون هناك حقل إضافي مثل:

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

أرغب في التحقق مما إذا كان الحقل المسمى "club" موجودًا حتى لا أتمكن من الحصول على org.json.JSONException: - لا قيمة للنادي

129
Adam Varhegyi

فئة JSONObject لها طريقة تسمى "has":

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

إرجاع صحيح إذا كان هذا الكائن يحتوي على تعيين للاسم. قد يكون التعيين NULL.

226
PX Developer

يمكنك التحقق بهذه الطريقة من حيث "HAS" - إرجاع صحيح إذا كان هذا الكائن يحتوي على تعيين للاسم. قد يكون التعيين NULL.

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

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

يمكنك أيضًا التحقق من استخدام 'isNull' - إرجاع صحيح إذا كان هذا الكائن لا يحتوي على تعيين للاسم أو إذا كان لديه تعيين قيمته NULL.

if (!json.isNull("club"))
    String club = json.getString("club"));
133
Nirali

يمكنك JSONObject#has ، مع توفير key كإدخال وتحقق مما إذا كانت الطريقة تُرجع true أو false. هل يمكن أيضا

استخدم optString بدلاً من getString:

إرجاع القيمة المعينة بالاسم إذا كانت موجودة ، والإكراه عليها إذا لزم الأمر. تُرجع السلسلة الفارغة في حالة عدم وجود مثل هذا التعيين

14
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
}
9
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
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;

يعمل في جميع المتصفحات الحالية.

1
cdturner

أقوم فقط بإضافة شيء آخر ، في حال أردت فقط التحقق مما إذا كان أي شيء تم إنشاؤه في JSONObject أم لا يمكنك استخدام length () ، لأنه افتراضيًا عند تهيئة JSONObject وعدم إدراج أي مفتاح ، فإنه فقط فارغ الأقواس {} واستخدام has (مفتاح السلسلة) لا معنى له.

حتى تتمكن من كتابة if (jsonObject.length() > 0) مباشرة وتفعل أشياءك.

سعيد التعلم!

0
Gurinder