नेस्टेड JSON ऑब्जेक्ट्स - क्या मुझे हर चीज के लिए सरणियों का उपयोग करना है?


109

क्या JSON में नेस्टेड ऑब्जेक्ट्स को रखने का कोई तरीका है ताकि मुझे हर चीज़ से एरेज़ न बनानी पड़े? मेरी वस्तु को त्रुटि के बिना पार्स करने के लिए मुझे इस तरह की संरचना की आवश्यकता है:

{"data":[{"stuff":[
    {"onetype":[
        {"id":1,"name":"John Doe"},
        {"id":2,"name":"Don Joeh"}
    ]},
    {"othertype":[
        {"id":2,"company":"ACME"}
    ]}]
},{"otherstuff":[
    {"thing":
        [[1,42],[2,2]]
    }]
}]}

अगर मैं इस ऑब्जेक्ट को "परिणाम" नामक एक चर में लाता हूं तो मुझे इस तरह से नेस्टेड ऑब्जेक्ट्स का उपयोग करना होगा:

result.data[0].stuff[0].onetype[0]

तथा

result.data[1].otherstuff[0].thing[0]

यह मेरे लिए अनाड़ी और बेमानी लगता है, यदि संभव हो तो मैं पसंद करूंगा:

result.stuff.onetype[0]

तथा

result.otherstuff.thing

लेकिन जब सब कुछ एक सरणी है तो मैं ऑब्जेक्ट कुंजियों का सीधे उपयोग कैसे कर सकता हूं? मेरे भ्रमित और अशिक्षित मन के लिए ऐसा कुछ करना अधिक उचित होगा:

{"data":
    {"stuff":
        {"onetype":[
            {"id":1,"name": ""},
            {"id":2,"name": ""}
        ]}
        {"othertype":[
            {"id":2,"xyz": [-2,0,2],"n":"Crab Nebula","t":0,"c":0,"d":5}
        ]}
    }
    {"otherstuff":
        {"thing":
            [[1,42],[2,2]]
        }
    }
}

मैंने शायद यहां कुछ मौलिक गलत समझा है, लेकिन मैं दूसरी शैली की वस्तु को स्वीकार करने के लिए jQuery पार्सर (और न ही देशी FF पार्सर का उपयोग jQuery 1.4) नहीं कर सकता। अगर कोई मुझे प्रबुद्ध कर सकता है, तो यह आभारी होगा!


1
एक से अधिक संपत्ति वाले ऑब्जेक्ट के लिए सिंटैक्स इस प्रकार है:{"stuff": ..., "otherstuff": ...}
जेसन ऑरेन्डोर्फ

1
@ जेसन: वह ऐसा पहले से ही जानता है; उन्होंने खुद लिखा था {"id":2,"name": ""}। हालाँकि, वह कमोबेश वही है जो वह पूछ रहा है, इसलिए मुझे यकीन नहीं है।
SLaks

जवाबों:


202

आपको सरणियों का उपयोग करने की आवश्यकता नहीं है।

JSON मान सरणियों, ऑब्जेक्ट्स या प्राइमेटिव्स (संख्या या स्ट्रिंग्स) हो सकते हैं।

आप इस तरह से JSON लिख सकते हैं:

{ 
    "stuff": {
        "onetype": [
            {"id":1,"name":"John Doe"},
            {"id":2,"name":"Don Joeh"}
        ],
        "othertype": {"id":2,"company":"ACME"}
    }, 
    "otherstuff": {
        "thing": [[1,42],[2,2]]
     }
}

आप इसे इस तरह से उपयोग कर सकते हैं:

obj.stuff.onetype[0].id
obj.stuff.othertype.id
obj.otherstuff.thing[0][1]  //thing is a nested array or a 2-by-2 matrix.
                            //I'm not sure whether you intended to do that.

9

प्रत्येक वस्तु को मूल वस्तु के अंदर रखा जाना चाहिए:

{ "data": {
    "stuff": {
        "onetype": [
            { "id": 1, "name": "" },
            { "id": 2, "name": "" }
        ],
        "othertype": [
            { "id": 2, "xyz": [-2, 0, 2], "n": "Crab Nebula", "t": 0, "c": 0, "d": 5 }
        ]
    },
    "otherstuff": {
        "thing":
            [[1, 42], [2, 2]]
    }
}
}

तो आप इस तरह से एक वस्तु घोषित नहीं कर सकते:

var obj = {property1, property2};

इसे होना चाहिए

var obj = {property1: 'value', property2: 'value'};

8

आपके पास अपने jSON डेटा के अंदर बहुत अधिक निरर्थक नेस्टेड हैं, लेकिन जानकारी को पुनः प्राप्त करना संभव है। यद्यपि अन्य लोगों ने कहा है कि आप इसे साफ करना चाहते हैं।

अंतिम सरणी तक प्रत्येक () को एक दूसरे के भीतर लपेटें () का उपयोग करें।

के लिए result.data[0].stuff[0].onetype[0]में jQuery आप निम्नलिखित कर सकता है:

`

$.each(data.result.data, function(index0, v) {
    $.each(v, function (index1, w) {
        $.each(w, function (index2, x) {
            alert(x.id);
        });
    });

});

`

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