जोबजेक्ट में खाली या नल जोकैन के लिए जाँच


90

मेरे पास निम्नलिखित है ...

JArray clients = (JArray)clientsParsed["objects"];

foreach (JObject item in clients.Children())
{
    // etc.. SQL params stuff...
    command.Parameters["@MyParameter"].Value = JTokenToSql(item["thisParameter"]);
}

JTokenToSql इस तरह दिखता है...

public static object JTokenToSql(JToken obj)
{
    if (obj.Any())
        return (object)obj;
    else
        return (object)DBNull.Value;
}

मैंने भी कोशिश की है ((JObject)obj).Count.. लेकिन काम नहीं कर रहा है।

जवाबों:


175

यह जाँचने के लिए कि क्या कोई संपत्ति मौजूद है JObject, आप वर्ग ब्रैकेट सिंटैक्स का उपयोग कर सकते हैं और देख सकते हैं कि परिणाम शून्य है या नहीं। यदि संपत्ति मौजूद है, JTokenतो हमेशा लौटा दी जाएगी (भले ही इसका nullJSON में मान हो)।

JToken token = jObject["param"];
if (token != null)
{
    // the "param" property exists
}

यदि आपके पास एक JTokenहाथ है और आप यह देखना चाहते हैं कि क्या यह गैर-खाली है, ठीक है, तो यह इस बात पर निर्भर करता है कि JTokenयह किस प्रकार का है और आप "खाली" को कैसे परिभाषित करते हैं। मैं आमतौर पर इस तरह से एक एक्सटेंशन विधि का उपयोग करता हूं:

public static class JsonExtensions
{
    public static bool IsNullOrEmpty(this JToken token)
    {
        return (token == null) ||
               (token.Type == JTokenType.Array && !token.HasValues) ||
               (token.Type == JTokenType.Object && !token.HasValues) ||
               (token.Type == JTokenType.String && token.ToString() == String.Empty) ||
               (token.Type == JTokenType.Null);
    }
}

1
मैं इसे विस्तार विधि की तरह बनाऊंगा: सार्वजनिक स्टेटिक बूल IsNullOrEmpty (यह JToken टोकन) {...} Jokoken token = jObject ["परम"] की तरह उपयोग करने के लिए; बूल खाली = token.IsNullOrEmpty ()
दिमित्री पावलोव

1
आप नहीं किया जा सका और जाँच ? (जाँच के बाद पाठ्यक्रम की अशक्त नहीं है)ToSrtingJTokenIsNullOrWhiteSpaceJToken
Coops

1
@CodeBlend एक वस्तु या एक सरणी के लिए काम नहीं करेगा - जब खाली हैं {}और []क्रमशः उन लोगों के क्रमबद्ध संस्करण ।
ब्रायन रोजर्स

1
मैं संपत्ति जाँच जोड़ूंगा: वापसी (टोकन == अशक्त) || (token.Type == JTokenType.Array &&! token.HasValues) (token.Type == JTokenType.Object &&! token.HasValues) || (token.Type == JTokenType.String && token.ToString () == String.Empty) || (token.Type == JTokenType.Null) || (टोकन। टाइप == JTokenType.Property && ((JProperty) टोकन) ।Value.ToString () == string.Empty);
jcmontx

59

आप जाँच सकते हैं कि क्या JToken मान शून्य है

JToken token = jObject["key"];

if(token.Type == JTokenType.Null)
{
    // Do your logic
}

3
ठीक उसी तरह जो मैं देख रहा था, एक खाली पैर के कारण, जो एक सामान्य प्रकार से लौट रहा है, जो एक सामान्य == शून्य तुलना से गुजरता है। धन्यवाद!
टिम टायलर

4

एक प्रकार भी है - JTokenType.Undefined।

यह जाँच @Brian रोजर्स उत्तर में शामिल होनी चाहिए।

token.Type == JTokenType.Undefined

1

C # 7 के अनुसार आप भी इसका उपयोग कर सकते हैं:

if (clientsParsed["objects"] is JArray clients) 
{
    foreach (JObject item in clients.Children())
    {
        if (item["thisParameter"] as JToken itemToken) 
        {
            command.Parameters["@MyParameter"].Value = JTokenToSql(itemToken);
        }
    }
}

ऑपरेटर ऑपरेटर प्रकार की जाँच करता है और यदि इसका सही मान क्लाइंट चर के अंदर है।


0

JToken को JArray में बदलने के लिए कुछ इस तरह का प्रयास करें:

static public JArray convertToJArray(JToken obj)
{
    // if ((obj).Type == JTokenType.Null) --> You can check if it's null here

    if ((obj).Type == JTokenType.Array)
        return (JArray)(obj);
    else
        return new JArray(); // this will return an empty JArray
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.