मैं एक JSON ऑब्जेक्ट को कई सरणियों के साथ कैसे बना सकता हूं?


83

मैंने JSON का उपयोग पहले कभी नहीं किया है, इसलिए मैं इसके सिंटैक्स से परिचित नहीं हूं।

फिलहाल मेरे पास कई एरे हैं जिनमें डेटा के विभिन्न टुकड़े हैं।

मैं एक JSON ऑब्जेक्ट बनाना चाहूंगा, जिसमें डेटा के कई टुकड़ों के साथ प्रत्येक में एक से अधिक सरणियाँ हों।

उदाहरण के लिए

एक वस्तु जिसे कार कहा जाता है, जिसमें कार के अलग-अलग मेक के लिए प्रत्येक में कई सरणियाँ होती हैं। प्रत्येक सरणी में कार के मॉडल के साथ-साथ कुछ अन्य प्रकार के डेटा भी होंगे जैसे कि दरवाजों की संख्या (वास्तव में इसका सिर्फ एक काल्पनिक उदाहरण नहीं है।)

अगर किसी ने वाक्य रचना को एक उदाहरण से समझाया तो यह बहुत सराहा जाएगा।


2
बहुत ही दुर्लभ परिस्थितियों को छोड़कर, आप सीधे JSON के साथ काम नहीं करते हैं। आप मूल डेटा संरचनाओं के साथ काम करते हैं, फिर उस संरचना को JSON स्ट्रिंग में परिवर्तित करने के लिए लाइब्रेरी का उपयोग करें।
मार्क बी

जवाबों:


160

सबसे बाहरी स्तर पर, एक JSON ऑब्जेक्ट एक के साथ शुरू {और अंत होता है }

नमूना डेटा:

{
    "cars": {
        "Nissan": [
            {"model":"Sentra", "doors":4},
            {"model":"Maxima", "doors":4},
            {"model":"Skyline", "doors":2}
        ],
        "Ford": [
            {"model":"Taurus", "doors":4},
            {"model":"Escort", "doors":4}
        ]
    }
}

यदि JSON को डेटा नामक एक चर को सौंपा जाता है, तो इसे एक्सेस करना निम्नलिखित की तरह होगा:

data.cars['Nissan'][0].model   // Sentra
data.cars['Nissan'][1].model   // Maxima
data.cars['Nissan'][2].doors   // 2

for (var make in data.cars) {
    for (var i = 0; i < data.cars[make].length; i++) {
        var model = data.cars[make][i].model;
        var doors = data.cars[make][i].doors;
        alert(make + ', ' + model + ', ' + doors);
    }
}

एक अन्य दृष्टिकोण (अनुक्रमित सरणी के बजाय कार मॉडल के लिए एक साहचर्य सरणी का उपयोग करना):

{
    "cars": {
        "Nissan": {
            "Sentra": {"doors":4, "transmission":"automatic"},
            "Maxima": {"doors":4, "transmission":"automatic"}
        },
        "Ford": {
            "Taurus": {"doors":4, "transmission":"automatic"},
            "Escort": {"doors":4, "transmission":"automatic"}
        }
    }
}

data.cars['Nissan']['Sentra'].doors   // 4
data.cars['Nissan']['Maxima'].doors   // 4
data.cars['Nissan']['Maxima'].transmission   // automatic

for (var make in data.cars) {
    for (var model in data.cars[make]) {
        var doors = data.cars[make][model].doors;
        alert(make + ', ' + model + ', ' + doors);
    }
}

संपादित करें:

सुधार: एक JSON ऑब्जेक्ट के साथ शुरू {और समाप्त होता है }, लेकिन यह JSON सरणी (सबसे बाहरी स्तर पर) के लिए भी मान्य है, जो इसके साथ शुरू [और समाप्त होता है ]

इसके अलावा, मूल JSON डेटा में महत्वपूर्ण सिंटैक्स त्रुटियों को ठीक किया गया है: JSON ऑब्जेक्ट के सभी प्रमुख नाम डबल कोट्स में होने चाहिए, और JSON ऑब्जेक्ट या JSON एरे में सभी स्ट्रिंग मान डबल कोट्स में भी होने चाहिए।

देख:


बस स्पष्ट करने के लिए: यह एक वस्तु है? क्या इसे [] कोष्ठक की आवश्यकता है?
हैरी

5
JSON डेटा एक ऑब्जेक्ट (मूल रूप से एक सहयोगी सरणी) है। इंडेक्स्ड सरणियों वर्ग कोष्ठक का उपयोग करें, [0,1,2]है, जबकि साहचर्य सरणियों घुंघराले ब्रेसिज़ उपयोग करते हैं, {x:1,y:2,z:3}। बाहरी वस्तु के भीतर कोई भी डेटा या तो सरणी का प्रकार हो सकता है, लेकिन बाहरी वस्तु को स्वयं घुंघराले ब्रेसिज़ का उपयोग करना होगा।
मैट कफ़लिन

और कैसे इस में कस्बों के माध्यम से मैं पाश होगा: pastebin.com/qyQ2Y9sn तो मैं अक्षां और एलएनजी का उपयोग कर सकते हैं।
हैरी

1
for (var town in markers.towns) { alert(markers.towns[town].lat) }
मैट कफ़लिन

1
ज़रूर, कोई बात नहीं :) मैंने ऊपर दिए दोनों उदाहरणों में JSON डेटा के माध्यम से पुनरावृति के कुछ उदाहरण जोड़े।
मैट कफ़लिन

21

एक अच्छी किताब जो मैं पढ़ रहा हूं: निकोलस सी। ज़कस 3 संस्करण के वेब डेवलपर्स के लिए पेशेवर जावास्क्रिप्ट में JSON सिंटैक्स के बारे में निम्नलिखित जानकारी है:

"JSON सिंटैक्स तीन प्रकार के मूल्यों के प्रतिनिधित्व की अनुमति देता है"।

आप जिस चीज़ में रुचि रखते हैं, उसके बारे में यह कहता है:

"जावास्क्रिप्ट में जावास्क्रिप्ट से एरोनियल नोटेशन का उपयोग करते हुए एरन का प्रतिनिधित्व किया जाता है। उदाहरण के लिए, यह जावास्क्रिप्ट में एक सरणी है:

var values = [25, "hi", true];

आप एक समान सिंटैक्स का उपयोग करके JSON में इसी सरणी का प्रतिनिधित्व कर सकते हैं:

[25, "hi", true]

एक चर या अर्धविराम की अनुपस्थिति पर ध्यान दें। Arrays और वस्तुओं का उपयोग डेटा के अधिक जटिल संग्रह को दर्शाने के लिए एक साथ किया जा सकता है, जैसे:

{
    "books":
              [
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C. Zakas"
                    ],
                    "edition": 3,
                    "year": 2011
                },
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C.Zakas"
                    ],
                    "edition": 2,
                    "year": 2009
                },
                {
                    "title": "Professional Ajax",
                    "authors": [
                        "Nicholas C. Zakas",
                        "Jeremy McPeak",
                        "Joe Fawcett"
                    ],
                    "edition": 2,
                    "year": 2008
                }
              ]
}

इस सरणी में पुस्तकों का प्रतिनिधित्व करने वाले कई ऑब्जेक्ट हैं, प्रत्येक ऑब्जेक्ट में कई चाबियाँ हैं, जिनमें से एक "लेखक" है, जो एक और सरणी है। ऑब्जेक्ट और सरणियाँ आमतौर पर JSON डेटा संरचना के शीर्ष-स्तरीय भाग होते हैं (भले ही यह आवश्यक नहीं है) और बड़ी संख्या में डेटा संरचनाओं को बनाने के लिए उपयोग किया जा सकता है। "

किसी JSON स्ट्रिंग में जावास्क्रिप्ट ऑब्जेक्ट को क्रमांकित (रूपांतरित) करने के लिए आप JSON ऑब्जेक्ट स्ट्रिंग () विधि का उपयोग कर सकते हैं। मार्क लिनुस उत्तर से उदाहरण के लिए:

var cars = [{
    color: 'gray',
    model: '1',
    nOfDoors: 4
    },
    {
    color: 'yellow',
    model: '2',
    nOfDoors: 4
}];

कारें अब एक जावास्क्रिप्ट वस्तु है। इसे JSON ऑब्जेक्ट में परिवर्तित करने के लिए आप कर सकते हैं:

var jsonCars = JSON.stringify(cars);

कौन सी पैदावार:

"[{"color":"gray","model":"1","nOfDoors":4},{"color":"yellow","model":"2","nOfDoors":4}]"

विपरीत करने के लिए, एक JSON ऑब्जेक्ट को जावास्क्रिप्ट ऑब्जेक्ट में कनवर्ट करें (इसे पार्सिंग कहा जाता है), आप पार्स () विधि का उपयोग करेंगे। यदि आपको अधिक जानकारी की आवश्यकता है तो उन शब्दों को खोजें ... या पुस्तक प्राप्त करें, इसके कई उदाहरण हैं।


उपरोक्त उदाहरण में "संस्करण" और "वर्ष" उद्धरण में होना चाहिए - jsonlint.co.uk अन्यथा मान्य नहीं होगा
rexall

2

एक और उदाहरण:

[  
[  
    {  
        "@id":1,
        "deviceId":1,
        "typeOfDevice":"1",
        "state":"1",
        "assigned":true
    },
    {  
        "@id":2,
        "deviceId":3,
        "typeOfDevice":"3",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":3,
        "deviceId":4,
        "typeOfDevice":"júuna",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":4,
        "deviceId":5,
        "typeOfDevice":"nffjnff",
        "state":"Regular",
        "assigned":true
    },
    {  
        "@id":5,
        "deviceId":6,
        "typeOfDevice":"44",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":6,
        "deviceId":7,
        "typeOfDevice":"rr",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":7,
        "deviceId":8,
        "typeOfDevice":"j",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":8,
        "deviceId":9,
        "typeOfDevice":"55",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":9,
        "deviceId":10,
        "typeOfDevice":"5",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":10,
        "deviceId":11,
        "typeOfDevice":"5",
        "state":"Excelent",
        "assigned":true
    }
],
1
]

सरणी की पढ़ें

$.each(data[0], function(i, item) {
         data[0][i].deviceId + data[0][i].typeOfDevice  + data[0][i].state +  data[0][i].assigned 
    });

JSON कोड को बेहतर ढंग से समझने के लिए http://www.jsoneditoronline.org/ का उपयोग करें


आपके जसन की दूसरी अंतिम पंक्ति पर 1 के साथ क्या है?
फिलिप किर्कब्राइड

1
@PhilipKirkbride सबसे बाहरी सरणी का दूसरा तत्व?
rootkea

1
var cars = [
    manufacturer: [
        {
            color: 'gray',
            model: '1',
            nOfDoors: 4
        },
        {
            color: 'yellow',
            model: '2',
            nOfDoors: 4
        }
    ]
]

ऑब्जेक्ट के अंदर एक कार निर्माता सरणी होने के बारे में क्या? इसलिए cars> manufacturer> model, color, doors। (किसी वस्तु के भीतर सरणियों के भीतर)
हैरी

-4

नीचे दी गई विधि का उपयोग करके कोई भी मान पास करें जो कि कोई भी है:

इनपुट पैरामीटर: url, उदाहरण के लिए: "/ नोड / [सरणी का कोई अंतर मान] / anyKeyWhichInArray" उदाहरण: "कारें / निसान / [0] / मॉडल"

यह किसी भी प्रतिक्रिया के लिए इस्तेमाल किया जा सकता है:

    public String getResponseParameterThroughUrl(Response r, String url) throws JsonProcessingException, IOException {
    String value = "";
    String[] xpathOrder = url.split("/");
    ObjectMapper objectMapper = new ObjectMapper();
    String responseData = r.getBody().asString();       
    JSONObject jsonObject = new JSONObject(responseData);
    byte[] jsonData = jsonObject.toString().getBytes();
    JsonNode rootNode = objectMapper.readTree(jsonData);
    JsonNode node = null;
    for(int i=1;i<xpathOrder.length;i++) {
        if(node==null)
            node = rootNode;
        if(xpathOrder[i].contains("[")){
            xpathOrder[i] = xpathOrder[i].replace("[", "");
            xpathOrder[i] = xpathOrder[i].replace("]", "");
            node = node.get(Integer.parseInt(xpathOrder[i]));
        }
        else
            node = node.path(xpathOrder[i]);
    }
    value = node.asText();
    return value;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.