একটি জসন কী উপস্থিত আছে কিনা তা কীভাবে পরীক্ষা করবেন?


165

সুতরাং, আমি সার্ভার থেকে কিছু জেএসওএন মান পেয়েছি তবে নির্দিষ্ট ক্ষেত্র থাকবে কিনা তা আমি জানি না।

তাই মত:

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

এবং কখনও কখনও, এখানে অতিরিক্ত ক্ষেত্র থাকবে:

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

আমি "ক্লাব" নামের ক্ষেত্রটি বিদ্যমান কিনা তা যাচাই করতে চাই যাতে পার্সিংয়ের সময় আমি org.json.JSONException না পেয়ে থাকি: ক্লাবের জন্য কোনও মূল্য নেই


যদি (jsonObject.getString ("ক্লাব")! = নাল) {// উপত্যকা এখানে পাবেন}
সফটওয়্যার সাইনাথ

3
না, ব্যতিক্রম কোড পরিচালনা করা বন্ধ হয়ে যায় এবং আরও পার্স ক্রিয়াকলাপ চলবে না।
আদম ভারেগেই

1
@ সফটওয়্যারসাইনাথ কাজ করেন না, এখনও ব্যতিক্রম পেয়েছেন।
আদম ভারেগেই

স্ট্রিং ক্লাবওয়ালু = ""; চেষ্টা করুন (ক্লাবওয়ালু = jsonobject.getString ("ক্লাব");} ক্যাচ (ব্যতিক্রম)) e
সফটওয়্যার সায়নাথ

উত্তর:


266

জেএসএনওবজেক্ট শ্রেণিতে একটি "হ্যাড" নামে একটি পদ্ধতি রয়েছে:

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

এই অবজেক্টটির নামের জন্য ম্যাপিং থাকলে সত্যটি প্রত্যাবর্তন করে। ম্যাপিংটি NULL হতে পারে।


28
কারণ "রয়েছে" খুব কর্নিশ? :)
Omri374

কী Integerটাইপ থেকে যদি হয় ?
oদও 95

2
@ Oদো 95 Integerএকটি মূল অনুভূতি হিসাবে খারাপ অনুশীলনের মত শব্দ হচ্ছে। JSON একটি স্ট্রিং কী এবং আপনার যা প্রয়োজন তার মান সহ হওয়া উচিত।
নিকো

@ Oদো 95, আমি বিশ্বাস করি যে একটি পূর্ণসংখ্যার জন্য সর্বদা একটি মান থাকে, আপনি যখনই কোনও পূর্ণসংখ্যার ঘোষণা করেন, আপনাকে এটির মান দিয়ে আরম্ভ করতে হবে।
মিট টনি

154

আপনি যেখানে এই স্থানে চেক করতে পারেন - যদি এই বস্তুর নামের জন্য ম্যাপিং থাকে তবে সত্য ফিরে আসে। ম্যাপিংটি NULL হতে পারে।

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

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

আপনি 'ইসনুল' ব্যবহার করেও পরীক্ষা করতে পারেন - যদি এই বস্তুর নামের জন্য কোনও ম্যাপিং না থাকে বা এর ম্যাপিং রয়েছে যার মান NULL হয় তবে সত্য ফিরে আসে।

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

1
আপনি কোন জসন লিব ব্যবহার করছেন, আপনি কি
জসন

@ সামুয়েলোভিনো জসন হ'ল ভেরিয়েবল যা আপনার অবজেক্ট ধারণ করে
ফার্নান্দো টরেস

17

আপনি করতে পারে JSONObject#has, প্রদানের keyইনপুট এবং চেক যদি পদ্ধতি আয় যেমন trueবা false। আপনিও পারেন

optStringপরিবর্তে ব্যবহার করুন getString:

নামের সাথে ম্যাপযুক্ত মানটি উপস্থিত থাকলে তা উপস্থিত হয়, যদি প্রয়োজন হয় তবে তা চাপ দিন। এ জাতীয় কোনও ম্যাপিং উপস্থিত না থাকলে খালি স্ট্রিংটি ফেরত দেয়


1
যদিও এই পদ্ধতিটি অন্যদের জন্য কার্যকর হতে পারে তবে মান বিদ্যমান থাকলে এটি ফিরে আসে না। যদি getStringএকটি খালি স্ট্রিং ফিরিয়ে দেয় তবে একটি খালি স্ট্রিংও ফেরত দেয় optString। অনুমানটি তখন আপনার বিশ্বাস করবে যে সম্পত্তিটি ওপির পরিস্থিতিতে উপলব্ধ নয়।
হাফপাস্টফোর.কম

@ ব্ল্যাকবেল্ট এর কাছে আপনার কি উত্স আছে?
tsuz

10

তুমি ব্যবহার করতে পার has

public boolean has(String key)

জেএসএনওবজেক্টে একটি নির্দিষ্ট কী রয়েছে কিনা তা নির্ধারণ করুন ।

উদাহরণ

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
}

is নাল ফাংশন সংজ্ঞা

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

জসনের একটি পদ্ধতি বলা হয় containsKey()

জসন সেটে কোনও নির্দিষ্ট কী রয়েছে কিনা তা পরীক্ষা করতে আপনি এটি ব্যবহার করতে পারেন।

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 আরম্ভ করা হয় এবং কোনও কী sertedোকানো হয় না, এটির খালি ধনুর্বন্ধনী রয়েছে {}এবং ব্যবহারগুলি রয়েছে (স্ট্রিং কী) কোনও অর্থ দেয় না।

সুতরাং আপনি সরাসরি লিখতে পারেন if (jsonObject.length() > 0) আপনার জিনিস এবং ।

সুখী শেখা!


0

আপনি ব্যবহার করতে পারেন JsonNode # hasNonNull (স্ট্রিং FIELDNAME) , এটা মিশ্রিত করা হয়েছে যদি এটি একটি হল পদ্ধতি এবং যাচাইকরণ নাল মান বা না

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