JSON এ নাল মান অন্তর্ভুক্ত করা উচিত [বন্ধ]


89

আমি এমন একটি এপিআই তৈরি করছি যা JSON হিসাবে ফলাফলগুলি ফেরত দেয়। মানটি শূন্য হলে ফলাফলের কীগুলি অন্তর্ভুক্ত করা উচিত কিনা এর জন্য কি বর্তমানের সেরা অনুশীলন রয়েছে? উদাহরণ স্বরূপ:

{
    "title":"Foo Bar",
    "author":"Joe Blow",
    "isbn":null
}

বা

{
    "title":"Foo Bar",
    "author":"Joe Blow"
}

দ্বিতীয়টি ছোট হওয়ায় আমি এই স্টাইলের দিকে ঝুঁকছি, তবে আমি পছন্দ করি না পছন্দসই শৈলী আছে কি না। ক্লায়েন্টের দৃষ্টিকোণ থেকে দেখে মনে হচ্ছে দুটি স্টাইলই কার্যত সমান হবে। প্রত্যেকের পক্ষে কোন উপকার বা বিবাদ?


6
এর সঠিক উত্তর দেওয়া অসম্ভব। সঠিক উত্তরটি আবেদনের প্রয়োজনীয়তার উপর নির্ভর করে। ওপি সহজভাবে উত্তর নির্বাচন করেছে যা তার প্রয়োজনীয়তার সাথে খাপ খায়। আপনার অ্যাপ্লিকেশনটির যদি "isbn" নাল বনাম কিনা তা জানার মধ্যে পার্থক্য করতে সক্ষম হওয়ার প্রয়োজন হয় যদি "ইসবিএন" অন্য কোনও কারণে সার্ভার থেকে প্রেরণ করা নাও পারে, আপনাকে এটি অন্তর্ভুক্ত করতে হবে।
জয় 21

@ জ্যাকব যদিও আমি এটি না বলি, এই প্রশ্নের সাথে আমার উদ্দেশ্যটি ছিল যে "পূর্ণ" জেএসওএন প্রতিক্রিয়ার প্রতিনিধিত্ব করে তা ফিরিয়ে দেওয়া হচ্ছে। যখন কোনও ক্লায়েন্ট ধরে নিতে পারেন যে দুটি পদ্ধতির মধ্যে কোনও কার্যকরী পার্থক্য নেই। যদি এআইপিআই বাছাই করে কী / মানগুলি না ফেরায় তবে হ্যাঁ এটির একটি বড় পার্থক্য হবে যা গ্রহণ করা হয়েছিল।
jjathman

প্রথম উপস্থাপনার সুবিধাটি হ'ল অবজেক্ট স্কিমা সংরক্ষণ করা হয়, তথ্যের উপর ভিত্তি করে সম্পত্তির উপস্থিতি অস্পষ্ট নয়। দ্বিতীয় ফর্ম্যাটে এই তথ্যটি হারিয়ে গেছে। এ জাতীয় জেএসওএন
সূর্য প্রতাপ

আমি মনে করি এই প্রশ্ন সম্পর্কে মতামত কিছুই নেই। জেএসএন একটি মান is এটির জন্য একটি স্পেসিফিকেশন এবং সম্ভবত আরএফসি'র একটি গোছা থাকতে হবে। // তার উপরে, এমনকি মতামতযুক্ত প্রশ্নগুলি গ্রহণযোগ্য হতে পারে। মেটা.স্ট্যাকেক্সচেঞ্জে এর আগেও এ নিয়ে আলোচনা হয়েছে যেখানে তারা রায় দিয়েছে যে "সেরা অভ্যাস" ভাগ করে নেওয়ার দিক থেকে মতামতমূলক প্রশ্নগুলি ঠিক আছে।
বিভিডিবি

উত্তর:


32

দ্বিতীয়টি ব্যান্ডউইথটিতে অল্প পরিমাণে সঞ্চয় করবে, তবে যদি এটি উদ্বেগের কারণ হয়ে থাকে তবে আপনি কীগুলির সাহায্যে জেএসওএনটি পূরণ করার পরিবর্তে সূচিকৃত অ্যারেগুলিও ব্যবহার করবেন। স্পষ্টতই, ["Foo Bar","Joe Blow"]আপনার এখন যা আছে তার চেয়ে অনেক কম।

ব্যবহারের ক্ষেত্রে, আমার মনে হয় না যে এটি কোনও পার্থক্য করে। উভয় ক্ষেত্রেই, if(json.isbn)এড়িয়ে যান elsenull(কোনও মূল্য) এবং undefined(কোনও প্রদত্ত মান) মধ্যে পার্থক্য করার প্রয়োজন নেই ।


7
+1 এর জন্য সাধারণত নাল (কোনও মূল্য নেই) এবং অপরিজ্ঞাত (প্রদত্ত মান নেই) এর মধ্যে পার্থক্য করার প্রয়োজন নেই। এমনকি এটির জন্য একটি != null
হ্যান্ডিয়ার অপারেটরও রয়েছে

ব্রাউজার কোনও নির্দিষ্ট ইভেন্টের ধরণকে সমর্থন করে তবেই কেবলমাত্র সেই ক্ষেত্রেই পরীক্ষা করা হবে। উদাহরণস্বরূপ, সমর্থিত if( typeof onbeforepaste == "undefined")কিনা onBeforePasteতা দেখতে । তারপরেও এতে কোনও তাত্পর্য তৈরি হয় না যেহেতু আপনি ইভেন্টগুলি বরাদ্দ করতে পারেন আপনার সমস্ত ইচ্ছা (অসমর্থিত হলে তারা কিছু করবেন না)
নিট দ্য ডার্ক আবসোল

6
স্থানান্তরিত বাইট সংরক্ষণের ক্ষেত্রে, ইনপেক্সেড অ্যারেগুলির মতো জিনিসগুলির চেয়ে কমপ্রেসন অনেক বেশি গুরুত্বপূর্ণ। web-resource-optimization.blogspot.no/2011/06/… আপনার প্রথম কাজটি নিশ্চিত করুন তা নিশ্চিত করুন। বেশিরভাগ ক্ষেত্রে এর উপরে সূচিকৃত অ্যারের মতো জিনিসগুলি যুক্ত করা আমি একে অকাল অপটিমাইজেশন বলব। আপনি যদি না প্রচুর পরিমাণে ডেটা প্রেরণ করেন। এটিতে আপনার অ্যাপে আরও জটিলতা যুক্ত করে অতিরিক্ত পার্সিংয়েরও প্রয়োজন। গিজিপ ব্রাউজারের দ্বারা নির্বিঘ্নে সম্পন্ন হয়। (ক্লায়েন্টটি ব্রাউজার হিসাবে ধরে নেওয়া)
মার্টিন হ্যানসেন

4
এইচটিটিপিএস দিনের আদর্শ হয়ে উঠার সাথে (কমপক্ষে বড় ইউজারবেসযুক্ত অ্যাপ্লিকেশনগুলির জন্য), সংকোচনের ফলে টস হয়ে যায়। দেখুন en.wikipedia.org/wiki/CRIME_%28security_exploit%29
গৌরব Vaish

6
আমি খ্যাতি থাকলে "নাল মধ্যে পার্থক্য করার প্রয়োজন হয় না" এর জন্য আমি আসলে এটি -1 করব। ২ টি কারণ থেকে: ১. কারণগুলি বিদ্যমান এবং এটি বিরল নয় best সর্বোত্তম অনুশীলন হ'ল সর্বদা মানকে "ভালভাবে সংজ্ঞায়িত করা" যার অর্থ সর্বদা যে কোনও অস্পষ্টতা রোধ করা উচিত - 1 মানের 2 অর্থ সর্বদা অশুভ - এটি অবশ্যই পরিষ্কার হওয়া উচিত ..
স্নেঞ্জিক

80

আমি সর্বদা নালকে স্পষ্টভাবে অন্তর্ভুক্ত করার একটি অনুরাগী যার অর্থ বহন করে। কোনও সম্পত্তি বাদ দেওয়ার সময় অস্পষ্টতা ছেড়ে যায়।

যতক্ষণ না সার্ভারের সাথে আপনার প্রোটোকল উপরের যে কোনওটিতে কাজ করতে রাজি হয়েছে তবে আপনি সার্ভার থেকে নাল পাস করলে আমি বিশ্বাস করি যে আপনার এপিআইগুলি আরও পরে নমনীয় করে তোলে।

জাভাস্ক্রিপ্টের হ'ল ওপেনপ্র্টি ফাংশন আপনাকে আরও অন্তর্দৃষ্টি দেয় তাও উল্লেখ করা উচিত।

/* if true object DOES contain the property with *some* value */
if( objectFromJSON.hasOwnProperty( "propertyName" ) )

/* if true object DOES contain the property and it has been set to null */
if( jsonObject.propertyName === null )

/* if true object either DOES NOT contain the property
   OR
   object DOES contain the property and it has been set to undefined */
if( jsonObject.propertyName === undefined )

4
হুবহু, "", নাল এবং অপরিজ্ঞাত মধ্যে পার্থক্য বুঝতে আরও বেশি লোকের প্রয়োজন। এই প্রশ্নের উত্তর ব্যবহারকারীদের প্রয়োজনীয়তার উপর নির্ভরশীল।
জে

13
+1 অন্য প্রান্তের ব্যক্তি (যিনি কোড লিখেছেন) সুস্পষ্ট মান দ্বারা আরও ভাল পরিবেশন করা হবে। তারা জাভাস্ক্রিপ্ট লিখতে পারে না ;-)
স্টিভ 011235

4
নোটের বিরুদ্ধে চেক করা ==, === এর সাথে কাজ করে না তা নোট করুন (কারণ অপরিবর্তিত == নাল)!
টমি

গৃহীত উত্তরের ঠিক প্রথম অংশটি এতই ভুল ...
শ্রেনেকিজ

আমি "propertyName" in objectFromJSONপরিবর্তে লিখতে হবে objectFromJSON.hasOwnProperty("propertyName")। এছাড়াও, আপনি যদি জেদ করে থাকেন hasOwnPropertyতবে Object.prototype.hasOwnProperty.call(objectFromJSON, "propertyName")সুরক্ষার জন্য লিখুন ।
অদিত এম শাহ

22

জাভাস্ক্রিপ্টে, এর থেকে nullআলাদা কিছু বোঝায় undefined

আপনার JSON আউটপুটটি JSON ডেটা ব্যবহারের নির্দিষ্ট প্রসঙ্গে আপনার অ্যাপ্লিকেশনটির দ্বারা ব্যবহৃত এবং প্রয়োজনীয় কী তা প্রতিফলিত করা উচিত।


4
জেএসএনে কোনও "অপরিজ্ঞাত" নেই, তাই আমার মনে হয় তিনি "খালি" বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করবেন কিনা তা কেবলই জিজ্ঞাসা করেন - এর {"prop":undefined}চেয়ে আলাদা {}
বার্গি

সম্মত, আমি ব্যাখ্যা করার চেষ্টা করছি যে প্রাপ্তির শেষে, যদি তিনি একটি নির্দিষ্ট সম্পত্তি বাতিল করার জন্য সন্ধান করেন তবে তা হবে না। এটি অপরিবর্তিত থাকবে, যদি বাদ পড়ে যায়।
ব্র্যাড

11

জাভা স্ক্রিপ্টের দুটি ভিন্ন অর্থ রয়েছে বলে যেগুলির মধ্যে পার্থক্য করার প্রয়োজন রয়েছে nullএবং আপনার অবশ্যই এটি অন্তর্ভুক্ত করা উচিত undefined। আপনি nullসম্পত্তিটি অজানা বা অর্থহীন অর্থ হিসাবে ভাবতে পারেন এবং undefinedঅর্থ হিসাবে সম্পত্তিটির অস্তিত্ব নেই।

অন্যদিকে, যদি এই পার্থক্য করার কারও যদি প্রয়োজন না হয় তবে এগিয়ে যান এবং এটি ছেড়ে যান।


0

আমি মনে করি আপনি যখন JSON ব্যবহারকারীর অভিজ্ঞতার পিছনে ডেটা হিসাবে ব্যবহার করেন তখন কোনও পার্থক্য নেই।

পার্থক্যটি JSON- কনফিগারেশন ফাইলগুলিতে উপস্থিত হয়, যখন কোনও ব্যবহারকারীর হাতে কিছু সম্পাদনা করা উচিত। আপনি যখন প্রথম উদাহরণটি ব্যবহার করেন আপনি ব্যবহারকারীকে কনফিগারেশন সম্পর্কে কিছু ইঙ্গিত দেন।


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