একটি জবজেক্টে খালি বা শূন্য জে টোকেনের জন্য পরীক্ষা করা


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.. তবে কাজ করছে বলে মনে হচ্ছে না।

উত্তর:


177

কোনওতে কোনও সম্পত্তি বিদ্যমান কিনা তা পরীক্ষা করতে JObjectআপনি বর্গাকার বন্ধনী বাক্য গঠন ব্যবহার করতে পারেন এবং ফলাফলটি বাতিল বা না তা দেখতে পারেন। সম্পত্তি উপস্থিত থাকলে, একটি JTokenসর্বদা ফিরিয়ে দেওয়া হবে ( nullএর জেএসএন- তে এর মান থাকলেও)।

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);
    }
}

4
আমি এটির সম্প্রসারণের পদ্ধতিটি এর মতো করব: পাবলিক স্ট্যাটিক বুল ইসনুলআরএম্প্টি (এই জে টোকেন টোকেন) {... J জে টোকেন টোকেন = jObject ["পরম"] এর মতো ব্যবহার করতে; বুল খালি = টোকেন.আইএসএনওলআরএম্পটি ()
দিমিত্রি পাভলভ

4
আপনি কি পরীক্ষা ToSrtingকরে দেখতে পারবেন না ? (চেক করার পরে অবশ্যই বাতিল নয়)JTokenIsNullOrWhiteSpaceJToken
কুপস

4
@ কোডবেল্যান্ড এটি কোনও অবজেক্ট বা অ্যারের জন্য কাজ করবে না - খালি যখন হয় যথাক্রমে {}এবং []যথাক্রমে সিরিয়ালযুক্ত সংস্করণগুলি ।
ব্রায়ান রজার্স

4
আমি সম্পত্তি যাচাই করা যুক্ত করব: ফিরে (টোকেন == নাল) || (টোকেন.টাইপ == জোটোকেনটাইপ.আরে ও& টোকেন.হ্যাসভ্যালুইস) || (টোকেন.টাইপ == জোটোকেনটাইপ.অবজেক্ট &&! টোকেন.হ্যাসভ্যালুইস) || (টোকেন.টাইপ == জে টোকেনটাইপ.স্ট্রিং অ্যান্ড অ্যান্ড টোকেন.টোস্ট্রিং () == স্ট্রিং.এম্পটি) || (টোকেন.টাইপ == জে টোকেনটাইপ.নুল) || (টোকেন.টাইপ == জে টোকেনটাইপ.প্রোপার্টি অ্যান্ড অ্যান্ড ((জেপ্রোপার্টি) টোকেন)। ভ্যালু.টোস্ট্রিং () == স্ট্রিং.এম্পটি);
jcmontx

59

আপনি জে টোকেন মানটি নাল কিনা তা যাচাই করতে নীচের হিসাবে এগিয়ে যেতে পারেন

JToken token = jObject["key"];

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

4
হুবহু আমি যা খুঁজছিলাম, খালি পরামিতিগুলির কারণে একটি নাল টাইপ ফিরে আসে যা একটি সাধারণ == নাল তুলনা করে। ধন্যবাদ!
টিম টাইলার 12

4

একটি প্রকারও আছে - জে টোকেনটাইপ.অনন্দিত।

এই চেকটি অবশ্যই @ ব্রায়ান রজার্স উত্তরের অন্তর্ভুক্ত থাকতে হবে।

token.Type == JTokenType.Undefined

1

সি # 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

জোটোকেনকে জ্যারেতে রূপান্তর করতে এরকম কিছু চেষ্টা করুন:

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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.