কোনও জেএসওএন তালিকার মধ্যে থাকা উপাদানগুলির ক্রম সংরক্ষণ করা আছে?


254

আমি জেএসওএন অবজেক্টে উপাদানগুলির ক্রমটি মূল ক্রম নয় বলে লক্ষ্য করেছি।

জেএসওএন তালিকার উপাদানগুলির সম্পর্কে কী? তাদের আদেশ কি বজায় রাখা হয়?

উত্তর:


370

হ্যাঁ, জেএসএন অ্যারেতে উপাদানগুলির ক্রম সংরক্ষণ করা হয়েছে। আরএফসি 7159 থেকে - জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (জেএসএন) ডেটা ইন্টারচেঞ্জ ফর্ম্যাট (জোর দেওয়া খনি):

একটি অবজেক্ট শূন্য বা আরও বেশি নাম / মান জোড়ের একটি আনর্ডারড সংগ্রহ, যেখানে একটি নাম একটি স্ট্রিং এবং মান একটি স্ট্রিং, সংখ্যা, বুলিয়ান, নাল, বস্তু বা অ্যারে।

একটি বিন্যাস একটি হল আদেশ শূন্য বা তার বেশি মূল্যবোধের অনুক্রম।

"অবজেক্ট" এবং "অ্যারে" পদটি জাভাস্ক্রিপ্টের সম্মেলনগুলি থেকে এসেছে।

কিছু বাস্তবায়ন জেএসওএন অবজেক্টগুলির ক্রমও সংরক্ষণ করে, তবে এটির নিশ্চয়তা নেই।


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

73

একটি অ্যারেতে উপাদানগুলির ক্রম ( []) বজায় রাখা হয়। কোনও "অবজেক্ট" ( {}) তে উপাদানের ক্রম (নাম: মান জোড়) নয়, এবং তাদের জন্য "জম্পল" হওয়া স্বাভাবিক, যদি জেএসওএন ফর্ম্যাটর / পার্সার নিজেই না করে থাকে তবে ভাষা-নির্দিষ্ট বস্তুর দ্বারা (অভিধান, অভ্যন্তরীণ উপস্থাপনা হিসাবে ব্যবহৃত হয় এমন এনএসডিকোরিয়াস, হ্যাশটেবল ইত্যাদি


7

ব্যবহারিকভাবে বলতে গেলে, কীগুলি যদি NaN টাইপের হয় তবে ব্রাউজারটি ক্রম পরিবর্তন করবে না।

নিম্নলিখিত স্ক্রিপ্টটি "ওয়ান", "দুই", "তিন" আউটপুট দেবে:

var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
    alert(foo[bar]);
}

যেখানে নিম্নলিখিত স্ক্রিপ্টটি "তিন", "এক", "দুই" আউটপুট দেবে:

var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
    alert(foo[bar]);
}

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

3
এই উত্তরটি একটি বিষয় নিয়ে আলোচনা করে। প্রশ্নটি জসন "তালিকার" সাথে সম্পর্কিত, যা কেবল অ্যারে বলতে অনুমান করা যেতে পারে, যা জেসন স্পেসিফিকেশন দ্বারা শব্দার্থগতভাবে আদেশ করা হয়েছে (জেরেমির উত্তর দেখুন)।
টম

5

কিছু জাভাস্ক্রিপ্ট ইঞ্জিন কী সন্নিবেশ ক্রমে রাখে। উদাহরণস্বরূপ, ভি 8, স্বাক্ষরযুক্ত 32-বিট সংখ্যার হিসাবে পার্স করা যায় এমন কীগুলি ব্যতীত সমস্ত কী সন্নিবেশ ক্রমে রাখে

এর অর্থ হ'ল আপনি যদি নিম্নলিখিতগুলির মধ্যে দুটি চালান:

var animals = {};
animals['dog'] = true;
animals['bear'] = true;
animals['monkey'] = true;
for (var animal in animals) {
  if (animals.hasOwnProperty(animal)) {
    $('<li>').text(animal).appendTo('#animals');
  }
}
var animals = JSON.parse('{ "dog": true, "bear": true, "monkey": true }');
for (var animal in animals) {
  $('<li>').text(animal).appendTo('#animals');
}

আপনি ক্রমাগত ক্রম, কুকুর , ভালুক এবং বানর ক্রোমে পাবেন, যা ভি 8 ব্যবহার করে। নোড.জেএসও ভি 8 ব্যবহার করে। আপনার হাজার হাজার আইটেম থাকলেও এটি সত্য হবে। অন্যান্য জাভাস্ক্রিপ্ট ইঞ্জিন সহ ওয়াইএমএমভি।

ডেমো এখানে এবং এখানে


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

1

"একটি জেএসওএন তালিকার উপাদানগুলির ক্রম বজায় রাখা হয়?" একটি ভাল প্রশ্ন না। আপনাকে জিজ্ঞাসা করতে হবে "যখন করছেন তখন কি কোনও জেএসওএন তালিকার উপাদানগুলির ক্রম বজায় রাখা হয় [...]?" ফেলিক্স কিং যেমন উল্লেখ করেছেন, জেএসএন একটি পাঠ্য ডেটা ফর্ম্যাট। এটি কোনও কারণ ছাড়াই পরিবর্তিত হয় না। কোনও (জাভাস্ক্রিপ্ট) অবজেক্ট দিয়ে জেএসএন স্ট্রিংকে বিভ্রান্ত করবেন না।

আপনি সম্ভবত অপারেশন সম্পর্কে কথা বলছেন JSON.stringify(JSON.parse(...))। এখন উত্তর: এটি বাস্তবায়নের উপর নির্ভর করে। JSON পার্সারগুলির 99% * বস্তুর ক্রম বজায় রাখে না এবং অ্যারের ক্রম বজায় রাখে না, তবে আপনি জেএসওএন ব্যবহার করতে পারেন এমন কিছু সঞ্চয় করতে

{
    "son": "David",
    "daughter": "Julia",
    "son": "Tom",
    "daughter": "Clara"
}

এবং এমন একটি পার্সার ব্যবহার করুন যা বস্তুর ক্রম বজায় রাখে।

* সম্ভবত আরও :)


1
ভুল, কমপক্ষে আপনি যদি JSON পার্সার ব্যবহারের কথা বলছেন। ভি 8 অর্ডার বজায় রাখে, এবং আমার অনুমান যে এটি একা জেএসএন পার্সার ব্যবহারের 1% এরও বেশি for কোড.google.com/p/v8/issues/detail?id=164#c1
বেঞ্জামিন

3
@ বেনআটকিন এটি মজার যে আপনার লিঙ্কটি ভি 8 কীভাবে অর্ডার বজায় রাখে না তার ব্যাখ্যাটির দিকে নির্দেশ করে।
ব্যবহারকারী 123444555621

2
"ডি ফ্যাক্টো স্ট্যান্ডার্ডটি সন্নিবেশ ক্রমের সাথে মেলে, যা ভি 8ও করে, তবে একটি ব্যতিক্রম ছাড়া"
বেনজমিন আটকিন

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