অ্যান্ড্রয়েড জসন এবং নাল মান


94

যখন একটি জেসন মান নাল হয় তখন আমি কীভাবে সনাক্ত করতে পারি? উদাহরণস্বরূপ: [{"ব্যবহারকারীর নাম": নাল}, {"ব্যবহারকারীর নাম": "নাল"}]

প্রথম কেসটি একটি অ-উপস্থিতি ব্যবহারকারীর নাম এবং দ্বিতীয়টি "নাল" নামের একজন ব্যবহারকারীকে উপস্থাপন করে। আপনি যদি তাদের উভয় মান পুনরুদ্ধার করার চেষ্টা করেন তবে ফলাফল "নাল"

JSONObject json = new JSONObject("{\"hello\":null}");
json.put("bye", JSONObject.NULL);
Log.e("LOG", json.toString());
Log.e("LOG", "hello="+json.getString("hello") + " is null? "
                + (json.getString("hello") == null));
Log.e("LOG", "bye="+json.getString("bye") + " is null? "
                + (json.getString("bye") == null));

লগ আউটপুট হয়

{"hello":"null","bye":null}
hello=null is null? false
bye=null is null? false

4
আপনি কি JSON নিয়ন্ত্রণ করেন? তারপরে ব্যবহারকারীর নাম ক্ষেত্রটি প্রেরণ এবং has(java.lang.String);পদ্ধতিটি ব্যবহার করবেন না
ব্লুন্ডেল

4
এটি একটি জ্ঞাত এবং ইচ্ছাকৃত বাগ: কোড. google.com/p/android/issues/detail?id=13830
হেইঞ্জি

উত্তর:


220

দিয়ে চেষ্টা করুন json.isNull( "field-name" )

তথ্যসূত্র: http://developer.android.com/references/org/json/JSONObject.html#is নাল ১০২৮ জাভা.লং। স্ট্রিং ৯৯৯


4
আমি আরও এগিয়ে গিয়ে NEVER এর ব্যবহারগুলি (KEY_NAME) এর সাথে বলব, calls কলগুলি প্রতিস্থাপন করে! IsNull (KEY_NAME))
স্কাই কেলসি

@ স্কাইকেলসি: আপনি কেন এমন বলবেন? এগুলি বিভিন্ন শব্দার্থবিজ্ঞানের সাথে আলাদা জিনিস ...
কে-ব্যালো

তুমি ঠিক বলছো. আমার অর্থ হ'ল আপনি বেশিরভাগ সময় ব্যবহার করেন (), আপনি সত্যিই আমাদের চেয়েছিলেন! ইস্কুল ()। বেশিরভাগ সময় আপনি যাচাই করে দেখেন যে নির্দিষ্ট কীটিতে কোনও মান রয়েছে কিনা এবং এটি আরও ভালভাবে সম্পন্ন হয়েছে! IsNull () দিয়ে।
স্কাই কেলসি

17

কারণ জেএসএনওবজেক্ট # গেটস্ট্রিং প্রদত্ত কীটি উপস্থিত থাকলে মান প্রদান করে, সংজ্ঞা অনুসারে এটি বাতিল হয় না। এই কারণেই JSONObject.NULL বিদ্যমান: একটি নাল JSON মান উপস্থাপন করতে।

json.getString("hello").equals(JSONObject.NULL); // should be false
json.getString("bye").equals(JSONObject.NULL); // should be true

4
আপনার উত্তরের জন্য ধন্যবাদ তবে ইমো এবং যেহেতু কীটি উপস্থিত না থাকলে যদি কোনও JSONException নিক্ষেপ করা হয় তবে আইটেমটি বাতিল হয়ে গেলে আরও যুক্তিসঙ্গত প্রত্যাবর্তন শূন্য হয়
অ্যাডদেব

আপনার নিজের লাইব্রেরির বিকাশকারীদের সাথে শৈলীগত পছন্দ গ্রহণ করতে হবে: পি
এফটিম্পসন

4
"নাল"! = নাল সমস্যাটি হ'ল নালটির এপিআই 9+ প্রয়োজন এবং কখনও কখনও আপনি নীচের এপিআইগুলি কাজ করতে চান। এই উত্তরটি ভাল, আপনি jsonObject.getString! = "নাল" ব্যবহার করতে পারেন।
সাগিত করে

14

অ্যান্ড্রয়েডের জন্য এটি কোনও JSONException বাড়াবে যদি এরকম কোনও ম্যাপিং উপস্থিত না থাকে। সুতরাং আপনি এই পদ্ধতিটি সরাসরি কল করতে পারবেন না।

json.getString("bye")

যদি আপনার ডেটা খালি থাকতে পারে (কীটি উপস্থিত নাও থাকতে পারে), চেষ্টা করুন

json.optString("bye","callback string");

বা

json.optString("bye");

পরিবর্তে.

আপনার ডেমো কোডে

JSONObject json = new JSONObject("{\"hello\":null}");
json.getString("hello");

এটি আপনার কাছে স্ট্রিং "নাল" নাল নয়।

আপনার চিৎকার ব্যবহার

if(json.isNull("hello")) {
    helloStr = null;
} else {
    helloStr = json.getString("hello");
}

4

প্রথমে চেক করুন isNull().... যদি ক্যান্ট কাজ করে তবে নীচে চেষ্টা করুন

এবং আপনাকে JSONObject.NULLনাল মান পরীক্ষা করতে হবে ...

 if ((resultObject.has("username")
    && null != resultObject.getString("username")
    && resultObject.getString("username").trim().length() != 0)
      {
               //not null
        }

এবং আপনার ক্ষেত্রে এটিও পরীক্ষা করে দেখুন resultObject.getString("username").trim().eqauls("null")


"If (! ফলাফলObject.isNull (" ব্যবহারকারীর নাম ")) && ফলাফলObject.getString (" ব্যবহারকারীর নাম ") হিসাবে সরলীকৃত (ট্রিম ()। দৈর্ঘ্য ()! = 0)"
স্কাই কেলসে

3

আপনি যদি প্রথমে জসনকে পার্স করতে পারেন এবং পরে অবজেক্টটি পরিচালনা করেন তবে এটি চেষ্টা করুন

পার্সার

Object data = json.get("username");

হ্যান্ডলার

if (data instanceof Integer || data instanceof Double || data instanceof Long) {
     // handle number ;
} else if (data instanceof String) {
     // hanle string;               
} else if (data == JSONObject.NULL) {
     // hanle null;                 
}

2

এখানে আমি ব্যবহার করি এমন একটি সহায়ক পদ্ধতি যাতে আমি কেবলমাত্র এক লাইনের কোডের সাথে জেএসএন স্ট্রিং পেতে পারি:

public String getJsonString(JSONObject jso, String field) {
    if(jso.isNull(field))
        return null;
    else
        try {
            return jso.getString(field);
        }
        catch(Exception ex) {
            LogHelper.e("model", "Error parsing value");
            return null;
        }
}

এবং তারপরে এরকম কিছু:

String mFirstName = getJsonString(jsonObject, "first_name");

আপনাকে আপনার স্ট্রিংয়ের মান দেবে বা আপনার স্ট্রিং ভেরিয়েবলটিকে নিরাপদে সেট করবে। আমি যখনই এই জাতীয় ক্ষতি এড়াতে পারি তখনই আমি জিএসএন ব্যবহার করি। এটি আমার মতে নাল মানকে আরও ভালভাবে পরিচালনা করে।

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