কী মানের জোড়গুলির জন্য কী JSON কাঠামো ব্যবহার করবেন?


23

কী JSON ফর্ম্যাট কী মূল্যের জোড়গুলির জন্য ভাল পছন্দ এবং কেন?

[{"key1": "value1"}, {"key2": "value2"}]

বা:

[{"Name": "key1", "Value": "value1"}, {"Name": "key2", "Value": "value2"}]

বা:

{"key1": "value1", "key2": "value2"}

প্রথম রূপটি আরও কমপ্যাক্ট এবং আরও বেশি "শব্দার্থক অর্থবহুল" বলে মনে হচ্ছে। দ্বিতীয় রূপটি আরও সমানভাবে কাঠামোগত বলে মনে হচ্ছে যা এটি প্রক্রিয়াজাতকরণে সহায়তা করতে পারে। তৃতীয় রূপটি আরও বেশি শব্দার্থক বলে মনে হচ্ছে।

মূল মান জোড়াটি অন্য কোনও আইটেমের সাথে স্বেচ্ছাসেবী ডেটা সংযুক্ত করতে ব্যবহৃত হবে। কোনও সিস্টেমের মাধ্যমে এটিকে রাউন্ড-টিপ করতে ডেটাটি অবশ্যই জেএসএন হিসাবে ক্রমিক করা উচিত।


3
আপনার যদি অর্ডার দেওয়ার প্রয়োজন না হয় তবে কেন বিবেচনা {"key1": "value1", "key2": "value2"}করবেন না ?
কেনেটিম

4
জেএসএন ইতিমধ্যে একটি (নেস্টেবল) অভিধান।
ক্যাসি স্পিকম্যান

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

আপনার প্রয়োজনগুলি পূরণ করার জন্য আপনার সর্বাধিক সহজ ব্যবহার করা উচিত, আশা করা যায় এটি সাধারণ অবজেক্ট ফর্ম (# 3)। তবে, আপনি যদি আরও বিকল্পগুলির সন্ধান করেন তবে আপনি সমান্তরালভাবে দুটি অ্যারে, কীগুলির জন্য এবং একটি মানগুলির জন্য ব্যবহার করতে পারেন; এখনও অবজেক্ট কী এবং ডুপ্লিকেট কী (যা # 3 দিয়ে সমর্থিত হবে না) সমর্থন করার সময় এটি যথাসম্ভব কমপ্যাক্ট হয়ে উঠবে।
এরিক tদ

উত্তর:


10

আপনি প্রথম বা তৃতীয় বিকল্পটি চয়ন করুন তা আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে। আপনি যদি একই ধরণের জিনিসটির অনেকগুলি উদাহরণের মডেলিং করেন তবে প্রথমটি চয়ন করুন। উদাহরণস্বরূপ, আপনার লোকদের একটি তালিকা রয়েছে। আপনি যদি একটি জিনিসের বিভিন্ন বৈশিষ্ট্যকে মডেলিং করেন তবে তৃতীয়টি চয়ন করুন। আপনার প্রথম বিন্যাসে পুনরাবৃত্তি কী থাকতে পারে তবে তৃতীয় নয় in

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

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


5
দ্বিতীয় বিকল্পটির বড় সুবিধা হ'ল এটি নন-স্ট্রিং কীগুলির সাথে বিশেষত সংমিশ্রিত কীগুলিতে কাজ করে।
কোডসইনচওস

1
দ্বিতীয় বিকল্পটি ভয়ানক এবং আপনি এখনও ব্যবহারের কেস খুঁজে পেতে পারেন? বহু কী / মান জোড়া সহ অভিধানের অ্যারে একাধিক বস্তু সংক্রমণ করার জন্য সর্বাধিক সাধারণ ফর্ম্যাট সম্পর্কে হওয়া উচিত।
gnasher729

2
@ gnasher729, আপনার "সবচেয়ে সাধারণ বিন্যাস" ক্ষেত্রে বাস্তব চাবি বাম দিকে সব আছেন: [{"key1": "value1", "key2": "value2"}]। এখানে দ্বিতীয় ফর্ম্যাটটি হ'ল আসল কীটি ডানদিকে রেখে দিচ্ছে এবং আপনাকে "নেম" নামক আরেকটি কী ব্যবহার করে আপনাকে আসল কীটির দিকে নির্দেশ করবে, এটি স্ট্যান্ডার্ড সরঞ্জামগুলির সাহায্যে পার্স করা অত্যন্ত কঠিন করে তুলেছে।
কার্ল বিলেফেল্ট

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

3
দুঃখিত, তবে এটি একটি খারাপ উত্তর। 2 য় বিকল্পটি খুব সাধারণভাবে ব্যবহৃত এবং পরামর্শ দেওয়া হয়। এটি কীগুলি নমনীয়তার জন্য অনুমতি দেয়, এটি গ্রাহককে না ভেঙে (আরও মান / মেটাডেটা ক্ষেত্র সহ) বাড়ানোর অনুমতি দেয় এবং এটি উপাদান ক্রম সংরক্ষণ করতে পারে। এছাড়াও, প্রদত্ত কারণগুলি বোগাস হ'ল এটি কোনও "স্বয়ংক্রিয় রূপান্তর" ভাঙবে না (এটি কেবল লেখকের উপস্থাপনাটিকে অ্যারে হিসাবে সম্মান করে) এবং এটি এক্সপ্যাথের মতো ক্যোয়ারী ইন্টারফেসের সাথে দুর্দান্ত কাজ করে। একমাত্র খারাপ দিকটি হ'ল বর্ধিত ভার্বোসটি।
হিজাজমান

5

3 য় ফর্ম্যাটটি সাধারণভাবে সেরা। যাইহোক, এখানে 1 ম ফর্ম্যাট জন্য উপযুক্ত কিছু উদাহরণ:

[{
  "username": "foo",
  "id": 1
}, {
  "username": "bar",
  "id": 2
}, {
  "username": "baz",
  "id": 3
}]

এখানে প্রতিটি বস্তু পৃথক জিনিসকে বোঝায় (এবং প্রতিটি বস্তু অন্যদের মতো একই কীগুলি ব্যবহার করে, সুতরাং সেগুলি সংহত করা যায়নি)। যাইহোক, তালিকার প্রতিটি বস্তু সংরক্ষণের { "username": "foo", "id": 1 }পরিবর্তে সংরক্ষণ করা হয় [{ "username": "foo" }, { "id": 1 }]কারণ 1) এটি সংক্ষিপ্ত এবং 2) এটি একটি ব্যবহারকারীর নাম এবং একটি আইডি সহ একটি জিনিস উল্লেখ করে, একটি ব্যবহারকারীর নাম সহ একটি জিনিস এবং কোনও আইডি সহ অন্য জিনিস।

দ্বিতীয় বিকল্পের সমস্যাটি হ'ল এটি JSON হিসাবে এবং এর সাথে কাজ করার জন্য উভয়ই খুব ভার্জোজ becomes তবে, সম্পত্তি সম্পর্কিত মেটা-তথ্য সংরক্ষণ করতে হলে এটি ব্যবহার করা যেতে পারে। একটি উদাহরণ:

{
  "key": "foo",
  "value": 1,
  "mutable": true
}

এখানে mutableআপনি সম্পত্তিটি নিজেই সংশোধন করতে পারবেন কিনা, এমন অভিমানের বিষয়টিকে বোঝায়, পিতামাত্ত বস্তুটি নয়। এর মতো মেটা-তথ্য জাভাস্ক্রিপ্টের অনুরূপ Object.defineProperty, যা কোনও সম্পত্তি সম্পর্কে "কনফিগারযোগ্য", "গণনাযোগ্য" এবং "লিখনযোগ্য" তথ্য সঞ্চয় করে।


আমি কিছু জেএসএন এর জন্য প্রথম বিন্যাসটি ব্যবহার করার চেষ্টা করছিলাম আমি একটি সি # REST শেষ পয়েন্টে প্রেরণ করছিলাম এবং এটি কোনও অভিধানে রূপান্তর করছিল না। এটিকে তৃতীয় বিন্যাসে রূপান্তর করা এটিকে সাফ করেছে।
fizch

5

আপনি বলছেন এগুলি কী / মান জোড়। সেক্ষেত্রে # 3: কী / মান জোড়ের অভিধান ব্যবহার করুন।

যদি এটি কী / মান জোড় না হয়, তবে তাদের "কী" এবং "মানগুলি" বলবেন না এবং # 2, স্বেচ্ছাসেবী সামগ্রীর সাথে অভিধানের একটি অ্যারে ব্যবহার করবেন না।

# 1 স্ট্রাকচারটি কেবল মূর্খনা না থাকলে আপনার কী / মান জোড়গুলির প্রয়োজন নেই তবে তাদের ক্রমও রয়েছে। যা আপনি খুব কমই করেন।


3

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

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