2012-10-27 4 views
6

उदाहरण के लिए:सी ++ में jsoncpp पार्सर का उपयोग करके कैसे नेस्टेड ऑब्जेक्ट/सरणी पार्स?

Json::Reader reader; 
    Json::Value val; 
    ifstream file("JSON/test.json"); 
    bool success = reader.parse(file, val, false); 
    vector<string> obj = val.getMemberNames(); 

    for (int i = 0; i < val.size(); i++) 
    { 
     // switch type of value 
     switch (val.get(obj.at(i), "default").type()) 
     { 
      case stringValue: 
       cout << "I'm string" << endl; 
       ... need to save **membername** and **value** 
       break; 
      case intValue: 
       cout << "I'm int" << endl; 
       ... need to save **membername** and **value** 
       break; 
      case nullValue: 
       cout << "I'm null" << endl; 
       break; 
      case arrayValue: 
       ... code to parse an array (with nested sure) ... 
       ... need to save 
       break; 
      case objectValue: 
       ... code to parse an object (with nested sure) ... 
       ... need to save 
       break; 
     } 
    } 

उदाहरण JSON फ़ाइल (JSON/test.json):

{ 
    "layout": "fit", 
    "xtype": "viewport", 
    "height": 200, 
    "style": { 
       "backgroundColor": "46f0a8" 
      }, 

      "items": 
      [ 
      { 
       "title": "Management Console", 
       "padding": "10 10 10 10", 
       "bodyPadding": 10, 
       "autoScroll": true, 
       "items2": [1, 2, 3] 
      } 
      ] 
} 

सरणी में आइटम, हम एक और सरणी (नेस्टेड) ​​ items2 कहा जाता है देख सकते हैं ।

अनुभव हो सकता है सरणियों के लिए निम्नलिखित:

array[Jacob, Joseph] or 
array[{name: Jacob, name: Joseph}] or 
array[{name: Jacob}, {name: Joseph}] 

वस्तुओं के लिए यह समान है। प्रत्येक क्षेत्र में, निश्चित रूप से कई घोंसला वाली वस्तुओं/सरणी हो सकते हैं। मैं सी ++ चर में डेटा कैसे सहेजूं?

+0

यह मेरे लिए बिल्कुल अस्पष्ट है, आप वास्तव में क्या पूछ रहे हैं। मैं 3 प्रश्न देखता हूं। मैं 'jsoncpp' लाइब्रेरी में' array' डेटा और 'ऑब्जेक्ट' डेटा को कैसे संसाधित करूं? मैं अलग-अलग डेटा संग्रह सम्मेलनों को कैसे अनुकूलित करूं? मैं सामान्य/घोंसले के मामलों को कैसे संभाल सकता हूं? – luk32

+0

यह स्पष्ट नहीं है कि आप एक पूर्वनिर्धारित सी ++ कक्षा में पार्स करना चाहते हैं, या आप मनमानी JSON डेटा को पार्स करना चाहते हैं। बाद के मामले में, 'JSON :: Value' को अन्य प्रारूपों में परिवर्तित करने में वास्तव में कोई बिंदु नहीं है; बस 'JSON :: Value' का उपयोग सीधे करें। –

उत्तर

0

आप अपना मुख्य पार्सिंग फ़ंक्शन रिकर्सिव बनाना चाहते हैं। फिर वेक्टर जैसे एसटीएल वर्गों का उपयोग करें जो आपको गतिशील रूप से आपके डेटा के लिए अधिक संग्रहण आवंटित करने की अनुमति देते हैं।

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