জেএসওএন সিনট্যাক্স কোনও বস্তুতে নকল কীগুলিকে অনুমতি দেয়?


205

এটি কি বৈধ জসন?

{
    "a" : "x",
    "a" : "y"
}

http://jsonlint.com হ্যাঁ বলে।

http://www.json.org/ এটি নিষিদ্ধ হওয়ার বিষয়ে কিছু বলে না।

তবে স্পষ্টতই এটি বেশি বোঝায় না, তাই না? বেশিরভাগ বাস্তবায়ন সম্ভবত হ্যাশটেবল ব্যবহার করে তাই এটি যেভাবেই ওভাররাইড করা হচ্ছে।


1
আপনি যদি একটিDictionary<string, string>
স্যাম লিচ

যদি কেউ এখানে JSON স্ট্রিংগুলিতে সদৃশ মানগুলি সন্ধানের সমাধানের জন্য প্রত্যাশায় আসে তবে নিখরচায় অনলাইন জসন ভ্যালিডেটারটি
পেপিজন অলিভিয়ার

jsonlint.com হ্যাঁ বলেছে। এটা যার ফলে এটি বৈধ তোলে না, এটি সব কিন্তু গত কী-মান জোড়া সরিয়ে ফেলবে এবং তারপর এটি অনুমোদিত হবে,
টিম

7
তারপরে স্ট্যান্ডার্ডটি নষ্ট হয়ে গেছে
ব্র্যাড থমাস

1
আমি মূল নামটি "-" একটি মন্তব্যকারী হিসাবে ব্যবহার করেছি এবং মানটি একটি একক স্ট্রিং লাইনের মন্তব্য হিসাবে। সুতরাং আমি আশা করি কোনও পার্সার এটি সম্পর্কে অভিযোগ করবেন না।
লোথার

উত্তর:


126

থেকে মান (P আ।) :

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

স্ট্যান্ডার্ড (পি। 2) এর আরও নিচে, জেএসওএন অবজেক্টের স্পেসিফিকেশন:

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

JSON অবজেক্টের জন্য ডায়াগ্রাম

এটি সদৃশ কীগুলি অবৈধ বা বৈধ হওয়ার কোনও উল্লেখ করে না, সুতরাং স্পেসিফিকেশন অনুসারে আমি নিরাপদে ধরে নেব এর অর্থ তারা অনুমোদিত allowed

তাদেরকে JSON লাইব্রেরি যে সবচেয়ে বাস্তবায়নের না না প্রথম উদ্ধৃতি কারণে ডুপ্লিকেট চাবি গ্রহণ মান সঙ্গে সংঘাতে না।

এখানে সি ++ স্ট্যান্ডার্ড লাইব্রেরি সম্পর্কিত দুটি উদাহরণ রয়েছে। কিছু JSON অবজেক্টটিকে একটিতে ডিসায়রিজ করার সময় std::mapএটি সদৃশ কীগুলি প্রত্যাখ্যান করা বুদ্ধিমান হয়ে উঠবে। তবে কিছু জেএসওএন অবজেক্টকে যখন ডিসরিয়ালাইজ std::multimapকরার সময় ডুপ্লিকেট কীগুলি স্বাভাবিক হিসাবে গ্রহণ করা বোধগম্য হয়।


5
আমি অনুমান করি যে আমি এটি একটি উত্তর হিসাবে গ্রহণ করতে পারি, যদিও আমি @ পেট্রিকগোলির উল্লেখ পছন্দ করি যে json.org এ একে কী / মান-জুটির একটি সেট বলা হয় যা স্বতন্ত্রতা বোঝায় যার অর্থ এটি বৈধ নয়।
ক্ল্যাম্প করুন

8
@ ক্ল্যাম্প json.org মানক নয় এবং যতদূর আমি বলতে পারি এমকা ইন্টারন্যাশনাল পরিচালনা করে না। json.org বেনামে উপস্থাপন করা হয়। এই স্পেসিফিকেশন: ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf কি json.org বলে প্রাসঙ্গিক নয়।
তীমথিয় শিল্ডস

5
@ ক্ল্যাম্প std::multimapআমি সবেমাত্র যুক্ত উদাহরণ বিবেচনা করুন । এটি সম্ভাব্য সদৃশ কীগুলির সাহায্যে একটি JSON অবজেক্ট হিসাবে সিরিয়ালাইজ করা যেতে পারে।
টিমোথি শিল্ডস

1
@ ক্ল্যাম্প কী / মান জোড়ের সেট হওয়ায় ডুপ্লিকেট নামগুলি অন্তর্ভুক্ত করে না। {"a":1,"a":2}দুটি স্বতন্ত্র কী / মান জোড়ার একটি সেট। প্রকৃতপক্ষে, এমনকি {"a":1,"a":1}কী / মান জোড়ার একটি সেট হিসাবেও ভাবা যেতে পারে যা কেবল একটি উপাদান রয়েছে। সত্য যে এটি পুনরাবৃত্তি হয় ঠিক একটি সিনট্যাকটিক গিরি হিসাবে বিবেচনা করা যেতে পারে। আরও ভাল সংজ্ঞা হবে, "একটি বস্তু স্ট্রিং (নাম) থেকে মান পর্যন্ত আংশিক ফাংশন।"
মার্সেলো ক্যান্টোস

2
@ টিমোথিলিহিল্ডস এবং সেই মানটির সাথে আপনি যা যুক্ত করেছেন, "জেএসওএন সিনট্যাক্স নাম হিসাবে ব্যবহৃত স্ট্রিংগুলিতে কোনও বিধিনিষেধ আরোপ করে না, নামের নামের স্ট্রিংগুলি অনন্য হতে হবে না এবং নাম / মান জোড়ার ক্রমকে কোনও গুরুত্ব দেয় না"
চার্লস

135

সংক্ষিপ্ত উত্তর: হ্যাঁ তবে প্রস্তাবিত নয়।
দীর্ঘ উত্তর: আপনি যা বৈধ বলছেন তার উপর এটি নির্ভর করে ...


ইসমা -404 "জেএসএন ডেটা ইন্টারচেঞ্জ সিনট্যাক্স" সদৃশ নাম (কীগুলি) সম্পর্কে কিছু বলে না।


তবে, আরএফসি 8259 "জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (জেএসএন) ডেটা ইন্টারচেঞ্জ ফর্ম্যাট" বলেছেন:

একটি অবজেক্টের মধ্যে নামগুলি অনন্য হওয়া উচিত।

এ প্রসঙ্গে উচিত উল্লেখিত বোঝা করা আবশ্যক BCP 14 :

উচিত এই শব্দ অথবা বিশেষণ "প্রস্তাবিত", মানে সেখানে বিশেষ পরিস্থিতিতে বৈধ্য কারণ অস্তিত্ব নাও থাকতে পারে একটি নির্দিষ্ট আইটেম উপেক্ষা করার, কিন্তু পুরো প্রভাব বোঝা করা আবশ্যক রেখে সাবধানে একটি ভিন্ন পথ বেছে নেওয়ার আগে তুলিত।


আরএফসি 8259 ব্যাখ্যা করে কেন অনন্য নাম (কীগুলি) ভাল:

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



এছাড়াও, যেমন সের্গেই মন্তব্যগুলিতে ইঙ্গিত করেছেন: ইসিএমএ-262 "ইসমাএসক্রিপ্ট® ভাষা নির্দিষ্টকরণ", পড়েছে:

কোনও বস্তুর মধ্যে যেখানে নকল নাম স্ট্রিংস রয়েছে সেখানে একই কীটির জন্য বর্ণিতভাবে পূর্ববর্তী মানগুলি ওভাররাইট করা হবে।

অন্য কথায়, সর্বশেষ-মান-জিত।


ডগলাস ক্রকফোর্ড ( জেএসএন এর স্রষ্টা) দ্বারা জাভা প্রয়োগের সাথে নকলযুক্ত নামগুলির সাথে একটি স্ট্রিং পার্স করার চেষ্টা করা হয়েছে তার ব্যতিক্রম :

org.json.JSONException: Duplicate key "status"  at
org.json.JSONObject.putOnce(JSONObject.java:1076)

1
জেএসএন বৈধ জাভাস্ক্রিপ্ট হওয়ার কথা, সুতরাং ডুপ্লিকেট কীগুলি আক্ষরিক ক্ষেত্রে বৈধ জেএস কিনা তা যাচাই করার জন্য এটি প্রাসঙ্গিক। ভি 8 এগুলি গ্রহণ করে বলে মনে হচ্ছে: d8 -e 'x={"a":1,"a":2}; print(x.a);'এটি 2 টি প্রিন্ট করে
বেন ক্রোয়েল

5
এছাড়াও ECMA-262 জন্য বৈশিষ্ট JSON.parse()স্পষ্টভাবে বলছেন In the case where there are duplicate name Strings within an object, lexically preceding values for the same key shall be overwritten.(অন্য কথায় শেষ মূল্য জয়ী)।
সেরোগেই

4
@BenCrowell: যতদুর আমি জানি, সামগ্রী বৈধ JSON জাভাস্ক্রিপ্ট হতে অনুমিত হয় না এবং সেখানে ক্ষেত্রে যেখানে এটা না হয়, দেখতে timelessrepo.com/json-isnt-a-javascript-subset । যা বলা হয়েছিল, এটি অবশ্যই জাভাস্ক্রিপ্ট দ্বারা প্রচুর অনুপ্রাণিত হয়েছিল (এটি জেএসএন স্পেসিফিকেশনেও তাই বলে)।
সাইমন টাচটেক

2
এটি লক্ষণীয় যে জাভাস্ক্রিপ্ট "কড়া মোড" ব্যবহার করার সময়, যদি দুটি অভিন্ন কী থাকে তবে ক্রোম দ্বিতীয় কী-মান জুটি ব্যবহার করবে এবং প্রথমটিকে অগ্রাহ্য করবে। আইই 11 একটি ব্যতিক্রম ছুঁড়ে ফেলবে।
শাহার

18

JSON ফর্ম্যাটটি উল্লেখ করে এমন 2 টি নথি রয়েছে:

  1. http://json.org/
  2. https://tools.ietf.org/html/rfc7159

1 ম নথি থেকে গৃহীত উত্তর উদ্ধৃতি। আমি মনে করি 1 ম নথিটি আরও স্পষ্ট, তবে ২ য় নম্বরে আরও বিশদ রয়েছে।

২ য় নথিতে বলা হয়েছে:

  1. অবজেক্টস

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

সুতরাং সদৃশ নাম রাখা নিষিদ্ধ নয় তবে এটি নিরুৎসাহিত করা হয়েছে।


10

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

নীচে আপনার নমুনা JSON এর একটি বৈধ এক্সএমএল উপস্থাপনা:

<object>
  <a>x</a>
  <a>y</a>
</object>

এটি যখন JSON এ রূপান্তরিত হয় আপনি নিম্নলিখিতগুলি পান:

{
  "object": {
    "a": [
      "x",
      "y"
    ]
  }
}

এমন একটি ভাষা থেকে প্রাকৃতিক ম্যাপিং যা আপনাকে অন্যকে ডুপ্লিকেট কীগুলি বলতে পারে তা পরিচালনা করে, এখানে সম্ভাব্য সেরা অনুশীলনের রেফারেন্স হিসাবে পরিবেশন করতে পারে।

আশা করি যে কাউকে সাহায্য করবে!


5

জেএসএন স্পেক এটি বলে:

একটি অবজেক্ট নাম / মান জোড়গুলির একটি আনর্ডারড সেট।

এখানে গুরুত্বপূর্ণ অংশটি "আনর্ডারড": এটি কীগুলির স্বতন্ত্রতা বোঝায়, কারণ আপনি নির্দিষ্ট জোড়কে উল্লেখ করার জন্য কেবলমাত্র যা ব্যবহার করতে পারেন তা হ'ল তার চাবি।

এছাড়াও, বেশিরভাগ জেএসওএন লিবিস হ্যাশ মানচিত্র / অভিধানগুলিতে জেএসওএন অবজেক্টকে ডিসিজায়ালাইজ করবে, যেখানে কীগুলি অনন্যতার গ্যারান্টিযুক্ত। ডুপ্লিকেট কীগুলির সাহায্যে আপনি কোনও জেএসওএন অবজেক্টকে ডিসিরিয়ালাইজ করার সময় কী ঘটে তা লাইব্রেরির উপর নির্ভর করে: বেশিরভাগ ক্ষেত্রেই আপনি হয় ত্রুটি পাবেন বা প্রতিটি নকল কীটির জন্য কেবল সর্বশেষ মানটি বিবেচনায় নেওয়া হবে।

উদাহরণস্বরূপ, পাইথনে, json.loads('{"a": 1, "a": 2}')ফিরে আসে {"a": 2}


23
অযৌক্তিকরতা স্বতন্ত্রতা বোঝায়? আমার মনে হয় সেটটি এখানে অপারেটিভ শব্দ
প্যাট্রিক গোলে

8
বর্ণহীনতার রঙের সংগ্রহ: নীল, সবুজ, সবুজ, নীল, লাল, নীল, সবুজ - এতে নকল রয়েছে।
টিমোথি শিল্ডস

5
আপনি যে পাঠ্য বাক্যাংশটি উদ্ধৃত করছেন, "একটি বস্তু নাম / মান জোড়গুলির একটি নিরবচ্ছিন্ন সেট,"
টিমোথি শিল্ডস

6
আমি এখন দেখছি যে আপনি json.org উদ্ধৃত করেছেন। এটি আধিকারিকের 'কাছাকাছি', তবে এটি নির্দিষ্টকরণ নয়। পৃষ্ঠার শীর্ষে স্পেসিফিকেশনের লিঙ্ক রয়েছে, যা json.org এ বার বার ভারব্যাটিম হয়। আপনি যদি সন্ধানটি অনুসন্ধান করেন। "অর্ডারড" শব্দটি উপস্থিত হয় না এবং "সেট" শব্দটি কেবল JSON অবজেক্টের সাথে সম্পর্কযুক্ত প্রসঙ্গেই উপস্থিত হয়।
টিমোথি শিল্ডস

5
মনে রাখবেন যে এটি " নাম / মান জোড়গুলির নিরক্ষিত সেট ", জোড়া নয় নামগুলি বলে। অর্থাৎ { (a,b), (a,c) } হয় একটি অনন্য সেট। প্রযুক্তিগতভাবে json.org অধীনে সংজ্ঞাটি {"a":1,"a":2}বৈধ তবে {"a":1,"a":2,"a":1}এটি নয় is আরও মনে রাখবেন যে ইসিএমএ -404 (প্রকৃত মান) "সেট" শব্দটি ব্যবহার করা এড়িয়ে চলে:An object structure is represented as a pair of curly bracket tokens surrounding zero or more name/value pairs.
সেরোগেই

3

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

[
  "div":
  {
    "p":"hello",
    "p":"universe"
  }
  "div":
  {
    "h1":"Heading 1",
    "p":"another paragraph"
  }
]

তারপরে উদাহরণস্বরূপ সহজেই এইচটিএমএলকে পার্স করতে পারে

<body>
 <div>
  <p>hello</p>
  <p>universe</p>
 </div>
 <div>
  <h1>Heading 1</h1>
  <p>another paragraph</p>
 </div>
</body>

আমি প্রশ্নের পিছনে যুক্তি দেখতে পাচ্ছি কিন্তু যেমন দাঁড়িয়েছে ... আমি এটি বিশ্বাস করব না।


আপনার প্রথম উদাহরণের অ্যারেটিতে কমা নেই। এছাড়াও, এটি নিজের সাথে বেমানান। যদি আপনি কোনও আদেশকৃত সংগ্রহ হিসাবে কোনও অভিধান ব্যবহার করতে চলেছেন তবে আপনার বাইরের অ্যারেও কেবল একটি অবজেক্ট হওয়া উচিত। অর্থাৎ {"div":{"p":"hello","p":"universe"}, "div":{"h1":"Heading 1","p":"another paragraph"}},। এখন, প্রচুর লোক এবং ফ্রেমওয়ার্কগুলি JSON অবজেক্টগুলিকে অযৌক্তিক অভিধান হিসাবে বিবেচনা করে তবে জাভাস্ক্রিপ্ট এবং উদাহরণস্বরূপ মঙ্গোডিবি'র এপিআই অভিধানের মধ্যে কীগুলি অর্ডার করার উপর নির্ভর করে, তাই আপনি যা আদেশ করছেন (আদেশযুক্ত অভিধানগুলি) তা শোনা যায় না। আপনার কেবলমাত্র একটি বিশেষ পার্সার প্রয়োজন।
বিনকি

2

উদ্দেশ্যে জিজ্ঞাসা, বিভিন্ন উত্তর আছে:

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

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

আমাদের JSON নমুনাগুলি মন্তব্য করতে সদৃশ কী ব্যবহার করতে । উদাহরণ:

{ "property1" : "value1", "REMARK" : "... prop1 controls ...", "property2" : "value2", "REMARK" : "... value2 raises an exception ...", }

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

সুতরাং, যদিও অ্যাপ্লিকেশন স্তরের কোনও অর্থ নেই, আমাদের জন্য এই নকলগুলি JSON এর ব্যবহারযোগ্যতা ভঙ্গ না করে আমাদের পরীক্ষার নমুনাগুলিতে মন্তব্য যুক্ত করার জন্য একটি মূল্যবান কাজের প্রস্তাব সরবরাহ করে ar


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

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

@ রিচার্ডস্মিথ আমি বলব পার্সার এবং আরও নতুন ইস স্পেকগুলি আচরণটির সংজ্ঞা দিয়েছে।
বিনকি

2

পোস্টিং এবং উত্তর কারণ মান সম্পর্কে প্রচুর পুরানো ধারণা এবং বিভ্রান্তি রয়েছে। ডিসেম্বর 2017 পর্যন্ত, দুটি প্রতিযোগিতামূলক মান রয়েছে:

আরএফসি 8259 - https://tools.ietf.org/html/rfc8259

ইসিএমএ -404 - http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

json.org প্রস্তাব দেওয়া ECMA-404 হয় মান, কিন্তু এই সাইটটি একটি কর্তৃপক্ষ বলে মনে করে না। যদিও আমি এটা ন্যায্য ECMA কর্তৃপক্ষ, যা এখানে গুরুত্বপূর্ণ তা হল, মান (অনন্য কী সংক্রান্ত) মধ্যে শুধু পার্থক্য বিবেচনা করতে মনে করেন যে জন্য RFC 8259 বলেছেন কী হয় উচিত অনন্য হওয়া, এবং ECMA-404 বলেছেন তারা হয় প্রয়োজন নেই হতে অনন্য।

জন্য RFC-8259:

"কোনও বস্তুর মধ্যে থাকা নামগুলি স্বতন্ত্র হওয়া উচিত।"

এই জাতীয় ক্যাপগুলিতে "উচিত" শব্দটির আরএফসি বিশ্বের মধ্যে একটি অর্থ রয়েছে, এটি অন্য একটি স্ট্যান্ডার্ডে নির্দিষ্টভাবে সংজ্ঞায়িত করা হয়েছে (বিসিপি 14, আরএফসি 2119 - https://tools.ietf.org/html/rfc2119 ) হিসাবে,

  1. এই শব্দটি বা "প্রস্তাবিত" বিশেষণটি বোঝাতে হবে যে কোনও নির্দিষ্ট আইটেমটিকে উপেক্ষা করার জন্য নির্দিষ্ট পরিস্থিতিতে বৈধ কারণ থাকতে পারে, তবে সম্পূর্ণ ইমপ্লিকেশনগুলি অবশ্যই অন্য কোর্সটি বেছে নেওয়ার আগে বোঝা উচিত এবং সাবধানতার সাথে ওজন করা উচিত।

ECMA-404:

"জেএসএন সিনট্যাক্স নাম হিসাবে ব্যবহৃত স্ট্রিংগুলিতে কোনও বিধিনিষেধ আরোপ করে না, নামের স্ট্রিংগুলি অনন্য হতে হবে না এবং নাম / মান জোড়ার ক্রমকে কোনও তাত্পর্য দেয় না।"

সুতরাং, আপনি এটি কীভাবে টুকরো টুকরো টুকরো করেন না কেন, এটি সিন্টেক্সিকভাবে বৈধ জেএসওএন

আরএফসি 8259 এ অনন্য কী প্রস্তাবনের জন্য প্রদত্ত কারণটি হ'ল,

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

অন্য কথায়, আরএফসি 8259 দৃষ্টিকোণ থেকে, এটি বৈধ তবে আপনার পার্সার বাধা দিতে পারে এবং কোন কী দিয়ে মানটি কীটি দিয়ে যুক্ত হবে তা নিয়ে কোনও প্রতিশ্রুতি নেই। ECMA-404 দৃষ্টিকোণ থেকে (যা আমি ব্যক্তিগতভাবে কর্তৃপক্ষ হিসাবে গ্রহণ করব), এটি বৈধ, সময়কাল। আমার কাছে এর অর্থ হ'ল যে কোনও পার্সার এটি বিশ্লেষণ করতে অস্বীকার করেছে তা ভেঙে গেছে। এটি কমপক্ষে এই দুটি মান অনুযায়ী পার্স করা উচিত। তবে এটি কীভাবে আপনার পছন্দসই নেটিভ অবজেক্টে পরিণত হয় তা হ'ল, যে কোনও ক্ষেত্রেই অনন্য কী বা না, পুরোপুরি পরিবেশ এবং পরিস্থিতির উপর নির্ভরশীল এবং এর কোনওটিই শুরু করার মান নয়।


json.org আসলে ইসিএমএ মানককরণের পূর্বাভাস দেয়। আমি বিশ্বাস করি এটি আসলে ক্রকফোর্ড নিজেই সেটআপ করেছিলেন (এ কারণেই এটির বইয়ের জন্য নির্লজ্জ প্লাগ রয়েছে)। এই মুহুর্তে এটি জেএসওনের পক্ষে কর্তৃত্ব ছিল।
সর্বোচ্চ

1

এটি ECMA JSON স্ট্যান্ডার্ডে সংজ্ঞায়িত হয়নি । এবং সাধারণভাবে বলতে গেলে, একটি স্ট্যান্ডার্ডের সংজ্ঞা না থাকার অর্থ "সর্বত্র এইভাবে একইভাবে কাজ করা বিবেচনা করবেন না।"

আপনি যদি জুয়াড়ি হন তবে "অনেকগুলি" জেএসএন ইঞ্জিনগুলি সদৃশকে অনুমতি দেবে এবং কেবল সর্বশেষ-নির্দিষ্ট মানটি ব্যবহার করবে। এই:

var o = {"a": 1, "b": 2, "a": 3}

এটি হয়ে:

Object {a: 3, b: 2}

তবে আপনি যদি জুয়াড়ি না হন তবে এটির উপর নির্ভর করবেন না!


1

মানটি এটি বলে:

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

বাগটি কমপক্ষে নোড.জেজে রয়েছে। এই কোডটি node.js. এ সাফল্য পেয়েছে

try {
     var json = {"name":"n","name":"v"};
     console.log(json); // outputs { name: 'v' }
} catch (e) {
     console.log(e);
}

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

1

আরএফসি -7159 অনুসারে, ইন্টারনেট ইঞ্জিনিয়ারিং টাস্ক ফোর্স (আইইটিএফ) দ্বারা প্রকাশিত জেএসএন-এর বর্তমান মানদণ্ডে বলা হয়েছে "একটি সামগ্রীর মধ্যে নামগুলি অনন্য হওয়া উচিত"। তবে, আরএফসি -2119 অনুসারে যা আইইটিএফ নথিগুলিতে ব্যবহৃত পরিভাষার সংজ্ঞা দেয়, "শব্দের" আসলে "অর্থ হওয়া উচিত ... ... কোনও নির্দিষ্ট আইটেমকে উপেক্ষা করার জন্য নির্দিষ্ট পরিস্থিতিতে বৈধ কারণ থাকতে পারে, তবে পুরো প্রভাবগুলি অবশ্যই বুঝতে হবে এবং অন্য কোর্সটি বেছে নেওয়ার আগে সাবধানতার সাথে ওজন করা হয়েছিল। " এর মূলত অর্থটি হ'ল অনন্য কী থাকার সময় সুপারিশ করা হলেও এটি আবশ্যক নয়। আমাদের কাছে কোনও জেএসএন অবজেক্টে নকল কী থাকতে পারে এবং এটি এখনও বৈধ হবে।

ব্যবহারিক প্রয়োগ থেকে, আমি দেখেছি শেষ কী থেকে মানটি বিবেচনা করা হয় যখন কোনও জেএসএনে সদৃশ কীগুলি পাওয়া যায়।


0

সি # তে যদি আপনি একটিকে ডিসরিয়াল করেন তবে Dictionary<string, string>এটিতে সর্বশেষ কী মান জোড় লাগে:

string json = @"{""a"": ""x"", ""a"": ""y""}";
var d = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
// { "a" : "y" }

আপনি যদি deserialise করার চেষ্টা করেন

class Foo
{
    [JsonProperty("a")]
    public string Bar { get; set; }

    [JsonProperty("a")]
    public string Baz { get; set; }
}

var f = JsonConvert.DeserializeObject<Foo>(json);

আপনি একটি Newtonsoft.Json.JsonSerializationExceptionব্যতিক্রম পেতে ।


2
আমি অনুমান করি যে এটিই সর্বাধিক (সমস্ত না থাকলে) বাস্তবায়নগুলি করে, তবে এটি JSON এর স্পেসিফিকেশন হিসাবে বৈধ কিনা তা আমার প্রশ্নের উত্তর দেয় না।
17:30

@ এসভিডজেন: এটি মাইক্রোসফ্ট বাস্তবায়নও নয় ... এটি একটি তৃতীয় পক্ষের লাইব্রেরি।
BoltClock

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