2014-05-08 21 views
6

मेरे पास निम्न जेसन है, दुर्भाग्य से इस आउटपुट पर मेरा कोई नियंत्रण नहीं है।JSON को एक कुंजी के रूप में संख्या के साथ पार्स कैसे करें

{ 
"questions": { 
    "9733": { 
     "text": "Star Trek or Star Wars?", 
     "answers": { 
      "41003": "Star Trek", 
      "41004": "Star Wars", 
      "41005": "Neither is superior in my opinion; both great in their own ways", 
      "41006": "Not a fan", 
      "41007": "I don't have an opinion on this" 
     } 
    }, 
    "25272": { 
     "text": "Which of these summer movies are you looking forward to the most?", 
     "answers": { 
      "99545": "World War Z", 
      "99546": "Monsters University ", 
      "99547": "White House Down", 
      "99548": "Man of Steel", 
      "99549": "Lone Ranger", 
      "99550": "The Wolverine" 
     } 
    }, 
    "27547": { 
     "text": "Should the U.S. attack Syria?", 
     "answers": { 
      "107453": "Yes", 
      "107454": "No" 
     } 
    } 
} 
} 

मैं इसका विश्लेषण करने के लिए json.parse का उपयोग कर रहा हूं। पहले प्रश्न का पाठ प्राप्त करने के लिए मैं सामान्य रूप से ऐसा कुछ करता हूं।

var jsonData = JSON.parse(data);//Where data = the json above 
console.log(jsonData.questions.9733.text);//Obviously this fails 

हालांकि जावास्क्रिप्ट को उस संख्या को स्पष्ट रूप से पसंद नहीं है। आप पहले प्रश्न के पाठ तक पहुंचने की सलाह कैसे देंगे? मैं जेसन को इसके बजाय प्रश्नों की एक श्रृंखला में बेहतर सेटअप करना पसंद करूंगा। दुर्भाग्यवश मेरे पास इस JSON के आउटपुट पर कोई नियंत्रण नहीं है।

मुझे यह भी पता नहीं चल रहा है कि चाबियाँ क्या हैं, लेकिन यह एक अन्य मुद्दा है। मैं इस बात का विश्लेषण करने के बारे में किसी भी सुझाव का मनोरंजन करना चाहता हूं क्योंकि मुझे इस तरह के अजीब JSON आउटपुट को कभी भी पार्स नहीं करना पड़ा।

+0

मैं सिर्फ 'jsonData [ 'सवाल'] का प्रयोग करेंगे

जावा कोड [ '9733'] [ 'पाठ']' ' – NullUserException

+0

jsonData.questions [9733] .text' काम करना चाहिए। 'foo.bar' और' foo ['bar'] 'जेएस में समकक्ष हैं। – IMSoP

उत्तर

8

आप bracket notation उपयोग करने की आवश्यकता:

console.log(jsonData.questions["9733"].text); 

लेकिन क्योंकि कोष्ठक के अंदर मान होगा स्वचालित रूप से एक स्ट्रिंग परिवर्तित, यह भी काम करेगा:

console.log(jsonData.questions[9733].text); 

नोट यह है कि गैर का उपयोग कर स्ट्रिंग्स संपत्ति नामों के रूप में आम तौर पर खराब रूप है और कुछ सूक्ष्म समस्याओं का कारण बन सकता है, उदाहरण के लिए अगर संपत्ति का नाम "001" था, तो [001] काम नहीं करेगा।

+0

संपत्ति के नाम तारों में डाले जाते हैं, इसलिए आपका अंतिम उदाहरण केवल काम नहीं करेगा क्योंकि '001'' 001 "' – NullUserException

+0

@NullUserException No के बजाय '1" में परिवर्तित हो जाता है, वास्तव में यह नहीं (कम से कम, ओपेरा/क्रोम में नहीं)। आखिरी उदाहरण को एक संख्या के रूप में प्रयास करते समय मुझे "अपरिभाषित" मिलता है, लेकिन वास्तविक डेटा जब मैं इसे एक स्ट्रिंग में परिवर्तित करता हूं। – Cypher

+0

@ साइफर मेरी टिप्पणी दोबारा पढ़ें। – NullUserException

1

आप कुंजी के रूप में नंबरों का उपयोग करने है ... आप उन्हें इस तरह उपयोग कर सकते हैं:

var text = jsonData.questions["9733"].text; 

संपादित करें: आप भी नंबर 9733. के साथ उपयोग कर सकते हैं यह एक स्ट्रिंग हो की जरूरत नहीं है । यदि कुंजी गैर-संख्यात्मक है तो केवल स्ट्रिंग होने की आवश्यकता है।

2

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

console.log(jsonData.questions[9733].text); 
+1

@NullUserException, लेकिन यह अभी भी – sabof

+1

@sabof काम करता है मैंने यह नहीं कहा कि यह एक सरणी है, लेकिन वाक्यविन्यास समान है। – Tohveli

+1

@NullUserException अनुमोदित, ऐसे समय होते हैं जब यह असफल हो जाता है (ps.s.w.g का उत्तर देखें), लेकिन इस विशेष मामले में यह काम करता है। मैं नहीं देखता कि यह कैसे जवाब "गलत" बनाता है। – Cypher

0

, Ason उपयोग करने का प्रयास Gradle निर्भरता संकलन 'org.arivu: ason: 1.0.3'। इस प्रकार

Ason ason = new Ason(); 
Object json = ason.fromJson("<<JSON String!>>"); 
System.out.println(Ason.getJson(json, "questions.9733.text", null)): 
+0

बस इतना ही आपको पता है कि आपको यह सुनिश्चित करने के लिए प्रश्न में टैग देखने की आवश्यकता है कि आप समझते हैं कि कौन सी भाषा का उपयोग किया जा रहा है। इस मामले में टैग जावास्क्रिप्ट है और जावा नहीं है। – Caimen

संबंधित मुद्दे