"इंडेक्स" (JSON) के रूप में संख्या का उपयोग करना


87

हाल ही में 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होगा जिससे मेरा जीवन आसान हो जाएगा। बेशक इसके आसपास अन्य तरीके हैं, लेकिन यह तरीका पसंद किया जाता है।


3
इसका कारण यह है कि जावास्क्रिप्ट में, कई अन्य भाषाओं के रूप में, एक संपत्ति / चर का नाम एक संख्या से शुरू नहीं हो सकता है, लेकिन केवल $, _, az और AZ के साथ। Game.status[0]एक सरणी क्यों नहीं है ? तब आपका सिंटैक्स होगा Game.status[0][0]
nikc.org

जवाबों:


126

JSON केवल प्रमुख नामों को तार होने की अनुमति देता है। उन तारों में संख्यात्मक मान शामिल हो सकते हैं।

हालांकि आप 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
JaredMcAteer

16
नहीं, लेकिन अनुमति देगा Game.status[0][0]
Amadan

4
@ ऑरिजिनलसिन में rigGame.status [0] .0´ होना असंभव है क्योंकि जावास्क्रिप्ट केवल संपत्ति के नाम को पत्र या अंडरस्कोर से शुरू करने की अनुमति देता है यदि आप डॉट नोटेशन का उपयोग करना चाहते हैं। उसके आसपास कोई रास्ता नहीं है।
जटासटटा जनता

1
उत्तर के लिए बहुत बहुत धन्यवाद, वास्तव में मैं क्या देख रहा था। ईमानदारी से, मुझे पता नहीं है कि मैंने शुरुआत करने के लिए एक सरणी के बारे में क्यों नहीं सोचा - मैं इसे मस्तिष्क फ्रीज पर दोष दूँगा।
जार

@ क्वेंटिन, You aren't using JSON though. You have a JavaScript object literal. केवल अंतर है var =या जेएसएन और जेएस ऑब्जेक्ट शाब्दिक के बीच अधिक अंतर हैं? क्या जेएस वस्तु मूल रूप से JSON एक चर में संग्रहीत है?
आंद्रे बुलटोव

6

सबसे पहले, यह JSON नहीं है: JSON यह कहता है कि सभी कुंजियों को तार होना चाहिए।

दूसरी बात, नियमित सरणियाँ वही करें जो आप चाहते हैं:

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

काम करेंगे, यदि आप उपयोग करते हैं Game.status[0][0]। आप डॉट नोटेशन ( .0) के साथ संख्याओं का उपयोग नहीं कर सकते ।

वैकल्पिक रूप से, आप संख्याओं को उद्धृत कर सकते हैं (अर्थात { "0": "val" }...); आपके पास Arrays के बजाय सादे ऑब्जेक्ट होंगे, लेकिन वही सिंटैक्स काम करेगा।


5

संभवतः आपको एक सरणी की आवश्यकता है?

var Game = {

    status: [
        ["val", "val","val"],
        ["val", "val", "val"]
    ]
}

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

3

जब एक जावास्क्रिप्ट ऑब्जेक्ट प्रॉपर्टी का नाम अंडरस्कोर या एक अक्षर से शुरू नहीं होता है, तो आप डॉट नोटेशन (जैसे Game.status[0].0) का उपयोग नहीं कर सकते, और आपको वैकल्पिक नोटेशन का उपयोग करना होगा , जो हैGame.status[0][0]

एक अलग ध्यान दें, क्या आपको वास्तव में स्टेटस ऐरे के अंदर ऑब्जेक्ट होने की आवश्यकता है? यदि आप किसी सरणी की तरह ऑब्जेक्ट का उपयोग कर रहे हैं, तो इसके बजाय एक वास्तविक सरणी का उपयोग क्यों न करें?


2

JSON स्ट्रिंग होने के लिए प्रमुख प्रकार को नियंत्रित करता है। उद्देश्य वस्तु के सदस्यों तक पहुँचने के लिए डॉट नोटेशन का समर्थन करना है।

उदाहरण के लिए, व्यक्ति = {"ऊंचाई": 170, "वजन": 60, "आयु": 32}। आप person.height, person.weight, आदि द्वारा सदस्यों तक पहुँच सकते हैं। यदि JSON मान कुंजियों का समर्थन करता है, तो यह person.0, person.1, person.2 की तरह दिखाई देगा।


1
मैं यह नहीं देखता कि व्यक्ति के साथ क्या गलत है।
अंशुल

0

व्हाट अबाउट

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

इनमें से एक काम करता है?

पुनश्च: आपके पास अपने प्रश्न में एक जावास्क्रिप्ट ऑब्जेक्ट है, न कि JSON। JSON एक जावास्क्रिप्ट ऑब्जेक्ट का 'स्ट्रिंग' संस्करण है।


"JSON एक जावास्क्रिप्ट ऑब्जेक्ट का 'स्ट्रिंग' संस्करण है।" वह सत्य नहीं है। JSON ऑब्जेक्ट एक जावास्क्रिप्ट ऑब्जेक्ट का सबसेट है। अन्यथा आप सही हैं कि यह जावास्क्रिप्ट ऑब्जेक्ट है क्योंकि यह JSON युक्ति के अनुरूप नहीं है
JaredMcAteer

JSON जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक संकेतन का सबसेट है और JSON ऑब्जेक्ट एक डेटा प्रकार है जिसे JSON में व्यक्त किया जा सकता है।
क्वेंटिन

@OriginalSyn: ठीक है, वास्तव में नहीं। JSON एक "विनिमेय" प्रारूप है, और इसे भाषा-स्वतंत्र स्ट्रिंग प्रारूप के रूप में उपयोग किया जाता है। अधिकांश भाषाएँ JSON को पार्स कर सकती हैं, और जावास्क्रिप्ट में, यह जावास्क्रिप्ट ऑब्जेक्ट में बदल जाएगी। Benalman.com/news/2010/03/theres-no-such-thing-as-a-json देखें ।
विलेम मुल्डर

1
@OriginalSyn: जावास्क्रिप्ट में, ऑब्जेक्ट शाब्दिक कभी JSON नहीं होते हैं , क्योंकि JSON हमेशा एक स्ट्रिंग है। ऑब्जेक्ट शाब्दिक तार नहीं हैं। "JSON ऑब्जेक्ट" शब्द का कोई मतलब नहीं है, क्योंकि कुछ "JSON" दोनों नहीं हो सकता है - एक स्ट्रिंग और एक "ऑब्जेक्ट" - एक गैर-स्ट्रिंग।
nnnnnn

0

JSON "जावास्क्रिप्ट ऑब्जेक्ट संकेतन" है। जावास्क्रिप्ट निर्दिष्ट करता है कि इसकी चाबी तार या प्रतीक होनी चाहिए।

एमडीएन डॉक्स से निम्न उद्धरण "कुंजी / संपत्ति" शब्द का उपयोग करता है, जिसका उल्लेख करने के लिए मैं अक्सर "कुंजी / मूल्य" के रूप में सुना जाता हूं।

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

जावास्क्रिप्ट में, वस्तुओं को गुणों के संग्रह के रूप में देखा जा सकता है। ऑब्जेक्ट शाब्दिक सिंटैक्स के साथ, गुणों का एक सीमित सेट आरंभीकृत होता है; तब गुण जोड़े और निकाले जा सकते हैं। संपत्ति के मूल्य किसी भी प्रकार के मूल्य हो सकते हैं, जिसमें अन्य ऑब्जेक्ट शामिल हैं, जो जटिल डेटा संरचनाओं को बनाने में सक्षम बनाता है। गुणों को प्रमुख मूल्यों का उपयोग करके पहचाना जाता है। एक कुंजी मूल्य या तो एक स्ट्रिंग या एक प्रतीक मूल्य है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.