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


16

জেএসএন নিম্নলিখিত তথ্য কাঠামো (জাভা সমতুল্য) সমর্থন করে: স্কেলার, অ্যারে / তালিকা এবং মানচিত্র।

Setজেএসওএন-এ-বক্স-অফ-বক্স সমর্থন করে না।

আমি JSON এ একটি সেট উপস্থাপনের বিভিন্ন উপায় সম্পর্কে ভেবেছিলাম:

[1] - একটি তালিকা হিসাবে

তবে একটি তালিকার নিজস্ব ক্রম রয়েছে, সুতরাং নিম্নলিখিত দুটি তালিকাগুলি, ["a", "b"]এবং ["b", "a"]তালিকার সমান নয়, তবে সেগুলি সেট হিসাবে সমান হওয়া উচিত।

[2] - একটি মানচিত্র হিসাবে

মানচিত্রের কী-সেটটি ব্যবহার করুন এবং মানগুলি উপেক্ষা করুন।

তবে আবার, মান তুলনা ব্যবহার করে, দুটি মানচিত্রের মতো নয়:

{"a": "foo", "b": "bar"}, {"a": null, "b": null}

[3] - একটি মান হিসাবে একটি বিশেষ মান

একটি স্ক্যালার নিন, বলুন 0বা nullমানচিত্রের প্রতিটি কী এর মান হতে বাধ্য করুন:

{"a": 0, "b": 0}

এই পদ্ধতিতে, মান তুলনা সরঞ্জামগুলির আওতায়, কী অর্ডার পরিবর্তন করা হলেও বস্তুগুলি সমান।

তবে এই কৌশলটি অপ্রাসঙ্গিক ডেটা সহ জেএসওএন ডকুমেন্টকে দূষিত করে।

[4] - একটি আদেশ তালিকা হিসাবে

প্রথম পরামর্শটিতে ফিরে আসুন তবে এবার আদেশের তালিকা হিসাবে। এই ধরণের তুলনা সমস্যা সমাধান করে।

তবে, বাছাইয়ের জটিলতাটিও আমাদের মনে রাখা উচিত, এবং সেই মানচিত্রের স্বরলিপিটি সদৃশগুলি হ্যান্ডল করে, যখন একটি সাজানো তালিকাটি তা করে না। উদাহরণ:

{"a": 400, "a": 9}হিসাবে পরিচালনা করা হয় {"a": 9}, কিন্তু ["g", "g"]সর্বদা হবে ["g", "g"]

সব বলার পরেও, আমার কাছে মনে হয় তালিকার স্বরলিপিটি আরও পরিষ্কার null

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

পুনশ্চ

এই প্রশ্নটি নোট করুন এটি নিছক জেএসওএন সম্পর্কে। আমি জানি যে ইয়ামলের মতো অন্যান্য ফর্ম্যাটগুলিও উপলব্ধ। এখনও ...


1
সেটগুলি JSON দ্বারা সমর্থিত নয়, এটি সুযোগের বাইরে। একটি সেট, বা একটি পৃথক, অনন্য সংগ্রহ, প্রয়োগের সুযোগের মধ্যে বিদ্যমান। কারণ এটি একটি সংগ্রহ, এটি সংগ্রহের সিনট্যাক্সটি ব্যবহার করা আরও সুস্পষ্ট obvious
জিমাস

1
আপনি কেন JSON এ সেট উপস্থাপন করতে চান? মনে রাখবেন JSON একটি এক্সচেঞ্জ ফর্ম্যাট।
আন্দ্রেস এফ।

@AndresF। আমি ভেবেছিলাম মানগুলির স্বতন্ত্র বৈশিষ্ট্যটি প্রকাশ করা ভাল ধারণা হবে। আমি জেএসনকে কেবল এক্সচেঞ্জের ফর্ম্যাটে বাঁধব না। এটি ডকুমেন্ট স্টোরেজের জন্যও কার্যকর হতে পারে (মঙ্গোডিবির মতো)।
রন ক্লেইন

@ রনক্লেইন ফেয়ার যথেষ্ট। তবে উঃ ... আমাকে মঙ্গোডিবি দিয়ে শুরু করবেন না: পি
অ্যান্ড্রেস এফ

ওয়াইএএমএলে, সেটগুলি আপনার বিকল্প হিসাবে উপস্থাপিত হয় [3], তবে এটির জেসন নেই বলে একটি বিশেষ স্বরলিপি রয়েছে।
জস্মিজন

উত্তর:


21

ভাল, আপনি পারবেন না। যেমনটি আপনি বলেছেন, আপনি অ্যারে এবং অভিধানগুলি উপস্থাপন করতে পারেন। আপনার দুটি পছন্দ আছে।

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

অভিধান প্রতি সেট হিসাবে প্রতিনিধিত্ব করুন, প্রতি প্রতি এক স্বেচ্ছাসেবী মান সহ, উদাহরণস্বরূপ 0 বা নাল। যদি আপনি কেবল মানগুলি উপেক্ষা করেন তবে এটি একটি নিখুঁত মিল। অন্যদিকে, আপনার কাছে কোনও সেট হিসাবে অভিধানের চাবিগুলি বের করার জন্য, বা একটি অভিধানকে একটি অভিধানে রূপান্তর করার জন্য কোনও গ্রন্থাগার সমর্থন থাকতে পারে।

আমার প্রোগ্রামিং পরিবেশে, সেট এবং অ্যারের মধ্যে রূপান্তরটি সহজ (সেট করতে অ্যারে সদৃশ মানগুলি হারাবে যা হয় না হওয়া উচিত, বা সঠিক হিসাবে বিবেচিত হবে), সুতরাং সেই কারণে আমি অ্যারেতে যাব। তবে এটি খুব মতের বিষয়।

বাট: ঘরে একটি বড় ফ্যাট হাতি রয়েছে যা উল্লেখ করা হয়নি। একটি JSON অভিধানের কীগুলি কেবল স্ট্রিং হতে পারে। যদি আপনার সেটটি স্ট্রিংয়ের সেট না হয় তবে আপনার কাছে কেবল অ্যারে ব্যবহার করার পছন্দ রয়েছে।


5
অ-স্ট্রিংয়ের প্রান্তের কেসটি অভিধানের বিরুদ্ধে ভাল যুক্তি।
রন ক্লেইন

4

জেএসএন-তে সেট উপস্থাপনের চেষ্টা করবেন না। পরিবর্তে ডেটা পার্স করার সময় এটি করুন।

আপনার জেএসওএন ডেটাতে একটি স্কিমা থাকা উচিত যা নির্দিষ্ট করে কোন ক্ষেত্রগুলিকে একটি সেট হিসাবে বিবেচনা করা উচিত, অথবা আপনার নিজের জেএসওএন ডেটাতে এম্বেড থাকা একটি মেটাডেটা থাকতে পারে যা কোনও তালিকা যখন সেট (যেমন {"houses": {"_type": "set", "value": [...]}}) হিসাবে বিবেচনা করা উচিত বা নামকরণ কনভেনশন সহ বর্ণনা করবে।

নোট করুন যে JSON স্ট্যান্ডার্ড অনুযায়ী, একটি JSON অবজেক্টে নকল কী থাকতে পারে। ECMA-404 শব্দ:

অবজেক্টস

[...] জেএসওএন সিনট্যাক্স নাম হিসাবে ব্যবহৃত স্ট্রিংগুলিতে কোনও বিধিনিষেধ আরোপ করে না, নামের স্ট্রিংগুলি অনন্য হতে হবে না এবং নাম / মান জোড়ার ক্রমকে কোনও তাত্পর্য দেয় না। এগুলি সমস্ত শব্দার্থবিজ্ঞানের বিবেচনা যা জেএসএন প্রসেসর দ্বারা সংজ্ঞায়িত করা যেতে পারে বা ডেটা এক্সচেঞ্জের জন্য জেএসএনের নির্দিষ্ট ব্যবহারগুলি নির্দিষ্ট করে নির্দিষ্টকরণে।

এএএএফআইসিডি, অনুমানের কিছুই অদ্বিতীয় নামগুলিকে নিষিদ্ধ করে না, এবং এমন অনেক জেএসএন পার্সার বাস্তবায়ন রয়েছে যা অনন্য অনন্য বস্তুর নাম পার্স করতে পারে। আরএফসি 7159 আন্তঃব্যবহারের জন্য অ-অনন্য নামগুলিকে নিরুৎসাহিত করে, তবে এটি বিশেষভাবে নিষেধ করবেন না এবং বিভিন্ন পার্সার কীভাবে অদ্বিতীয় অবজেক্টের নাম পরিচালনা করতে দেখা গেছে তা তালিকাভুক্ত করে।

এবং ইসিএমএ 404 এরও প্রয়োজন নেই যে অ্যারে ক্রম সংরক্ষণ করা উচিত:

অ্যারেগুলির

JSON সিনট্যাক্স মানগুলির ক্রমানুসারে কোনও নির্দিষ্ট অর্থ সংজ্ঞায়িত করে না। তবে, জেএসএন অ্যারের কাঠামো প্রায়শই এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে ক্রমটির কিছুটা শব্দার্থবিজ্ঞান রয়েছে।

এই শব্দগঠন অ্যাপ্লিকেশনগুলিকে তারা যদি চয়ন করে তবে সেগুলি উপস্থাপন করতে অ্যারে ব্যবহার করতে দেয়।

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