নম্বরটিকে "সূচক" (জেএসএন) হিসাবে ব্যবহার করা হচ্ছে


89

সম্প্রতি JSON এ খনন শুরু হয়েছে এবং আমি বর্তমানে "সনাক্তকারী" হিসাবে একটি নম্বর ব্যবহার করার চেষ্টা করছি যা খুব ভালভাবে কাজ করে না। foo:"bar"ভাল কাজ করে, যখন 0:"bar"না।

var Game = {
    status: [
                {
                    0:"val",
                    1:"val",
                    2:"val"
                },
                {
                    0:"val",
                    1:"val",
                    2:"val"
                }
           ]
}

alert(Game.status[0].0);

এটি নিম্নলিখিত উপায়ে করার কোন উপায় আছে? এরকম কিছু Game.status[0].0আমার জীবনকে সহজ করে তুলবে। অবশ্যই এর চারপাশে অন্যান্য উপায় রয়েছে, তবে এই উপায়টি পছন্দ করা হয়।


4
এর কারণটি হ'ল জাভা স্ক্রিপ্টে, অন্যান্য অনেক ভাষায়, কোনও সম্পত্তি / ভেরিয়েবলের নাম কোনও সংখ্যার সাথে শুরু করতে পারে না, তবে কেবল $, _, অ্যাজ এবং এজেড দিয়ে শুরু করতে পারে। Game.status[0]একটি অ্যারে হয় না কেন ? তারপরে আপনার সিনট্যাক্সটি হবে Game.status[0][0]
nicc.org

উত্তর:


132

জেএসএন কেবল কী নামগুলিকে স্ট্রিং করার অনুমতি দেয়। এই স্ট্রিংগুলিতে সংখ্যার মান থাকতে পারে।

আপনি যদিও JSON ব্যবহার করছেন না। আপনার জাভা স্ক্রিপ্ট অবজেক্ট আক্ষরিক রয়েছে। আপনি কীগুলির জন্য সনাক্তকারী ব্যবহার করতে পারেন, তবে একটি সনাক্তকারী কোনও সংখ্যা দিয়ে শুরু করতে পারে না। আপনি এখনও স্ট্রিং ব্যবহার করতে পারেন।

var Game={
    "status": [
        {
            "0": "val",
            "1": "val",
            "2": "val"
        },
        {
            "0": "val",
            "1": "val",
            "2": "val"
        }
    ]
}

আপনি যদি ডট-নোটেশন সহ বৈশিষ্ট্যগুলি অ্যাক্সেস করেন তবে আপনাকে সনাক্তকারী ব্যবহার করতে হবে। পরিবর্তে বর্গাকার বন্ধনী স্বরলিপি ব্যবহার করুন:Game.status[0][0]

তবে সেই ডেটা দেওয়া, একটি অ্যারে আরও বোধগম্য মনে হবে।

var Game={
    "status": [
        [
            "val",
            "val",
            "val"
        ],
        [
            "val",
            "val",
            "val"
        ]
    ]
}

এটি আপনাকে এখনও করতে দেয় নাGame.status[0].0
জ্যারেডএমসিএটিয়ার

16
না, তবে অনুমতি দেবে Game.status[0][0]
আমাদান

4
@ অরিজিনালসিন - গেম.স্ট্যাটাস [0] .0´ থাকা অসম্ভব কারণ জাভাস্ক্রিপ্ট কেবলমাত্র ডট স্বরলিপিটি ব্যবহার করতে চাইলে একটি চিঠি বা আন্ডারস্কোর দিয়ে সম্পত্তি নাম শুরু করতে দেয় begin এর আশেপাশে কোনও উপায় নেই।
জাতাতাত

4
উত্তরের জন্য অনেক ধন্যবাদ, আমি ঠিক যা খুঁজছিলাম। সত্যি বলতে কি, আমি কেন জানি না যে আমি কেন অ্যারে শুরু করার জন্য ভাবি নি - আমি এটি মস্তিষ্কের জমাটবদ্ধ করার জন্য দোষ দেব।
জার

@ কুইন্টিন, জেএসওএন এবং জেএস বস্তুর আক্ষরিক মধ্যে You aren't using JSON though. You have a JavaScript object literal. কি কেবল পার্থক্য var =রয়েছে? একটি জেএস অবজেক্টটি কি মূলত জেএসওএন একটি ভেরিয়েবলে সঞ্চিত থাকে?
আন্দ্রে বুলাটোভ

7

প্রথমত, এটি জেএসএন নয়: জেএসওএন নির্দেশ দেয় যে সমস্ত কীগুলি অবশ্যই স্ট্রিং হওয়া উচিত।

দ্বিতীয়ত, নিয়মিত অ্যারে আপনি যা চান তা করেন:

var Game = {
  status: [
    [
      "val",
      "val",
      "val"
    ],
    [
      "val",
      "val",
      "val"
    ]
  }

আপনি যদি ব্যবহার করেন, কাজ করবে Game.status[0][0]। আপনি বিন্দু চিহ্নিতকরণ ( .0) সহ নম্বর ব্যবহার করতে পারবেন না ।

বিকল্পভাবে, আপনি সংখ্যাগুলি উদ্ধৃত করতে পারেন (অর্থাত্ { "0": "val" }...); অ্যারেগুলির পরিবর্তে আপনার সরল বস্তু থাকবে তবে একই বাক্য গঠন কাজ করবে।



3

যখন কোনও জাভাস্ক্রিপ্ট অবজেক্ট প্রোপার্টিটির নাম আন্ডারস্কোর বা কোনও চিঠি দিয়ে শুরু হয় না, আপনি বিন্দু চিহ্ন (যেমন Game.status[0].0) ব্যবহার করতে পারবেন না , এবং আপনাকে অবশ্যই বিকল্প স্বরলিপি ব্যবহার , যাGame.status[0][0]

একটি আলাদা নোট, আপনার কি সত্যই স্ট্যাটাস অ্যারের অভ্যন্তরে কোনও বস্তু হওয়া দরকার? আপনি যদি অ্যারেটির মতো অবজেক্টটি ব্যবহার করছেন তবে পরিবর্তে আসল অ্যারে ব্যবহার করবেন না কেন?


2

JSON কী টাইপকে স্ট্রিং হিসাবে নিয়ন্ত্রণ করে। উদ্দেশ্যটি হ'ল অবজেক্টের সদস্যদের অ্যাক্সেস করার জন্য ডট স্বীকৃতিটিকে সমর্থন করা।

উদাহরণস্বরূপ, ব্যক্তি = height "উচ্চতা": 170, "ওজন": 60, "বয়স": 32}} আপনি person.height, person.ight ইত্যাদির মাধ্যমে সদস্যদের অ্যাক্সেস করতে পারেন যদি JSON মান কীগুলি সমর্থন করে, তবে এটি person.0, person.1, person.2 এর মতো দেখাবে।


4
আমি দেখতে পাচ্ছি না, ব্যক্তি ১, ব্যক্তি ২ ইত্যাদি কী হয়েছে?
আনশুল

1

জেএসএন হ'ল "জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন"। জাভাস্ক্রিপ্ট নির্দিষ্ট করে এর কীগুলি অবশ্যই স্ট্রিং বা প্রতীক হতে হবে।

এমডিএন ডক্সের নিম্নলিখিত উদ্ধৃতিগুলি "কী / সম্পত্তি" পদটি ব্যবহার করে যা আমি প্রায়শই শুনতে পাই তাকে "কী / মান" হিসাবে অভিহিত করা হয়।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects

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


0

কি সম্পর্কে

Game.status[0][0] or Game.status[0]["0"] ?

এই এক কাজ করে?

PS: আপনার প্রশ্নে যা আছে তা JSON নয়, একটি জাভাস্ক্রিপ্ট অবজেক্ট। জেএসএন হ'ল জাভাস্ক্রিপ্ট অবজেক্টের 'স্ট্রিং' সংস্করণ।


"জেএসএন হ'ল একটি জাভাস্ক্রিপ্ট অবজেক্টের 'স্ট্রিং' সংস্করণ।" ওটা সত্যি না. একটি JSON অবজেক্ট একটি জাভাস্ক্রিপ্ট অবজেক্টের একটি উপসেট। অন্যথায় আপনি সঠিক হন যে এটি একটি জাভাস্ক্রিপ্ট অবজেক্ট কারণ এটি জেএসওএন
অনুমানের

জেএসএন হ'ল জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক স্বরলিপি একটি উপসেট এবং একটি JSON অবজেক্ট একটি ডেটা টাইপ যা JSON এ প্রকাশ করা যেতে পারে।
কোয়ান্টিন

@ অরিজিনাল সেন: ঠিক আছে, সত্যিই নয়। জেএসএন একটি "বিনিময়যোগ্য" ফর্ম্যাট, এবং ভাষা-স্বাধীন স্ট্রিং ফর্ম্যাট হিসাবে ব্যবহৃত হয়। বেশিরভাগ ভাষাগুলি JSON কে বিশ্লেষণ করতে পারে এবং জাভাস্ক্রিপ্টে এটি জাভাস্ক্রিপ্ট অবজেক্টে রূপান্তরিত হবে। Benalman.com/news/2010/03/theres-no-such-thing-as-a-json দেখুন ।
উইলেম মুলদার

4
@ অরিজিনালসিন: জাভাস্ক্রিপ্টে, অবজেক্ট লিটারেল কখনই জেএসএন হয় না , কারণ জেএসএন সবসময় স্ট্রিং থাকে। অবজেক্ট ল্যাটারালগুলি স্ট্রিং নয়। "JSON অবজেক্ট" শব্দটি কোনও অর্থবোধ করে না, কারণ কিছু "JSON" - স্ট্রিং এবং একটি "অবজেক্ট" - একটি স্ট্রিংহীন স্ট্রিং উভয়ই হতে পারে না।
nnnnnn
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.