कैसे चेक करें कि क्या json key मौजूद है?


165

इसलिए, मुझे सर्वर से कुछ JSON मान मिलते हैं, लेकिन मुझे नहीं पता कि कोई विशेष क्षेत्र होगा या नहीं।

बिल्कुल वैसा ही:

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

और कभी-कभी, एक अतिरिक्त क्षेत्र होगा:

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

मैं जांचना चाहूंगा कि क्या "क्लब" नाम का क्षेत्र मौजूद है ताकि पार्स करने पर मुझे org.json नहीं मिलेगा। JSONException: क्लब के लिए कोई मूल्य नहीं


if (jsonObject.getString ("क्लब")! = null) {// यहाँ vale प्राप्त करें}
सॉफ्टवेयर साईनाथ

3
नहीं, अपवाद को संभालने पर कोड बंद हो जाता है, और आगे पार्स क्रियाएं नहीं चलती हैं।
एडम वरघिएजी

1
@SoftwareSainath Thats काम नहीं करता, फिर भी अपवाद मिला।
एडम वराहिजी

स्ट्रिंग क्लबवेलु = ""; ट्राई (क्लबवेल्यू = jsonobject.getString ("क्लब");} कैच (अपवाद e) {}
सॉफ्टवेयर साईनाथ

जवाबों:


266

JSONObject क्लास में "है" नाम की एक विधि है:

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

यदि यह ऑब्जेक्ट नाम के लिए मैपिंग है, तो सही है। मैपिंग NULL हो सकती है।


28
क्योंकि "सम्‍मिलित" बहुत भयंकर है? :)
ओमरी

यदि कुंजी Integerप्रकार से है तो क्या होगा ?
इदो

2
@ Eido95 Integerबुरा अभ्यास की तरह एक महत्वपूर्ण लगता है। JSON एक स्ट्रिंग कुंजी और आपके लिए जो कुछ भी आवश्यक है, उसका एक मूल्य होना चाहिए।
निको

@ Eido95, मेरा मानना ​​है कि एक पूर्णांक के लिए हमेशा एक मूल्य होता है, हर बार जब आप पूर्णांक घोषित करते हैं, तो आपको इसे एक मूल्य के साथ आरंभीकृत करना होगा।
mut टोनी

154

आप इस तरह से जाँच कर सकते हैं जहाँ 'एचएएस' - सही है अगर इस ऑब्जेक्ट में नाम के लिए मैपिंग है। मैपिंग NULL हो सकती है।

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

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

यदि आप इस ऑब्जेक्ट का नाम के लिए कोई मैपिंग नहीं है या यदि इसका कोई मैपिंग है जिसका मान NULL है, तो आप 'nNull' - रिटर्न का उपयोग करके भी देख सकते हैं।

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

1
जोसन लिब का उपयोग कर रहे हैं, क्या आप json-smart या json-simple के लिए एक सरल उदाहरण प्रदान कर सकते हैं
samuel owino

@samuelowino जसन चर चर है जिसमें आपकी वस्तु है
फर्नांडो टॉरेस

17

आप इनपुट JSONObject#hasप्रदान कर सकते हैं keyऔर जाँच सकते हैं कि क्या विधि वापस आती है trueया false। आप भी कर सकते हैं

के optStringबजाय का उपयोग करें getString:

यदि मौजूद है, तो नाम के द्वारा मैप की गई मान लौटाता है, यदि आवश्यक हो तो इसे जोर-जबरदस्ती करता है। यदि कोई मैपिंग मौजूद नहीं है तो खाली स्ट्रिंग लौटाता है


1
यद्यपि यह विधि दूसरों के लिए उपयोग की जा सकती है, लेकिन यदि मान मौजूद है तो यह वापस नहीं आता है। यदि getStringएक खाली स्ट्रिंग optStringलौटाता है , तो एक खाली स्ट्रिंग भी लौटाएगा। मान लें कि क्या आप मानते हैं कि संपत्ति ओपी की स्थिति में उपलब्ध नहीं है।
halfpastfour.am

@Blackbelt क्या आपके पास इसके लिए स्रोत हैं?
tsuz

10

आप उपयोग कर सकते हैं 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
}

10

पढ़ने से पहले कुंजी की तरह इसे पढ़ें पहले पढ़ें

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
}

null फ़ंक्शन परिभाषा है

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)


2

इसे इस्तेमाल करे

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

2
isNullवास्तव में यह जांचने के लिए है कि मैपिंग शून्य है या नहीं, किसी सदस्य की उपलब्धता की जांच के लिए नहीं।
रेजा_रग

2

सशर्त का उपयोग करने के बजाय एक बेहतर तरीका, जैसे:

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

बस मौजूदा विधि का उपयोग करना है (जैसे),

String club = json.optString("club);

ऑप्टस्ट्रिंग ("कुंजी") विधि एक खाली स्ट्रिंग लौटाएगा यदि कुंजी मौजूद नहीं है और इसलिए, आप एक अपवाद नहीं फेंकेंगे।


2

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
}

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;

सभी वर्तमान ब्राउज़रों में काम करता है।



1

आप यह देख सकते हैं कि कुंजी मौजूद है या नहीं, यह जांचने के लिए:

JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
  object.get("key");
  //etc. etc.
}

0

मैं सिर्फ एक और बात जोड़ रहा हूं, अगर आप सिर्फ यह जांचना चाहते हैं कि JSONObject में कुछ भी बनाया गया है या नहीं, तो आप लंबाई () का उपयोग कर सकते हैं , क्योंकि डिफ़ॉल्ट रूप से जब JSONObject को इनिशियलाइज़ किया जाता है और कोई कुंजी नहीं डाली जाती है, तो इसमें बस खाली ब्रेसिज़ होते हैं {}और उपयोग करते हैं (स्ट्रिंग कुंजी) कोई मतलब नहीं है।

तो आप सीधे if (jsonObject.length() > 0)अपनी चीजें लिख सकते हैं और कर सकते हैं।

खुश सीखने!


0

आप JsonNode # hasNonNull (स्ट्रिंग फ़ील्डनाम) का उपयोग कर सकते हैं , इसमें एक शून्य मान है या नहीं , इसकी विधि और सत्यापन मिलाएं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.