2012-04-06 6 views
10
{"hi": "hellow", 
"first": 
    {"next":[ 
      {"key":"important_value"} 
     ] 
    } 

} 

सरणी के अंदर RapidJSON पहुँचने से एक सरणी के अंदर एक मूल्य मिल रहा है:RapidJSON पुस्तकालय अपने सूचकांक

इस काम करता है: cout << "HI VALUE:" << variable["hi"].GetString() << endl; इस वसीयत उत्पादन: hellow अपेक्षा के अनुरूप, समस्या की तरह अगर मैं चाहता हूँ अंदर मूल्यों तक पहुँचने के लिए है "महत्वपूर्ण_वैल्यू" प्राप्त करें, मैंने इस तरह कुछ करने की कोशिश की: cout << "Key VALUE:" << variable["first"]["next"][0]["key"].GetString() << endl ; लेकिन यह काम नहीं करता है, मैं सरणी के पहले आइटम द्वारा "important_value" प्राप्त करने में सक्षम होना चाहता हूं, और इस मामले में यह [0] है जो त्रुटि उत्पन्न कर रहा है।

मैं इसे अपने सूचकांक से प्राप्त करने के लिए कैसे करूं? मुझे उम्मीद है कि यह मेरी व्याख्या स्पष्ट है।

अग्रिम धन्यवाद।

उत्तर

20

JSON

{"hi": "hellow", "first": {"next":[{"key":"important_value"} ] } } 

कोड:

rapidjson::Document document;  

if (document.Parse<0>(json).HasParseError() == false) 
{ 
    const Value& a = document["first"]; 

    const Value& b = a["next"]; 

    // rapidjson uses SizeType instead of size_t. 
    for (rapidjson::SizeType i = 0; i < b.Size(); i++) 
    { 
     const Value& c = b[i]; 

     printf("%s \n",c["key"].GetString()); 
    }   
} 

प्रिंट होगा important_value

+1

यह किसी भी फेलो का जवाब नहीं देता है, ब्रैकेट [] के साथ मेरे उदाहरण का एक उदाहरण बनाते हैं, ब्रैकेट समस्याएं हैं क्योंकि यह सरणी की स्वचालित स्थिति है, पहला वाला 0 है, अगला 1 है और इसी तरह .. आपने जो किया है, मेरे पास पहले से ही है, मेरे उदाहरण में मूल्य प्राप्त करने का प्रयास करें, उसी स्रोत का उपयोग करें। – Grego

+0

इसे आजमाएं ........ – mola10

+0

यह वही है जो मैं सरणी सदस्य में नेस्टेड ऑब्जेक्ट तक पहुंचने के लिए देख रहा हूं। +1 – haxpor

2

मैं tutorial.cpp फ़ाइल में इस पर ध्यान;

// Note: 
//int x = a[0].GetInt();   // Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type. 
int y = a[SizeType(0)].GetInt(); // Cast to SizeType will work. 
int z = a[0u].GetInt();   // This works too. 

मैंने इसका परीक्षण नहीं किया लेकिन आप इनमें से किसी एक को आजमा सकते हैं;

चर [ "पहली"] [ "अगला"] [0u] [ "कुंजी"]। GetString()

चर [ "पहली"] [ "अगला"] [SizeType (0)] [ " कुंजी "]। GetString()

13

[अपडेट]

योगदानकर्ताओं के चतुर काम करके, RapidJSON अब शाब्दिक 0 स्ट्रिंग से स्पष्ट करने कर सकते हैं। तो मुद्दा अब नहीं होता है।

https://github.com/miloyip/rapidjson/issues/167


समस्या, के रूप में mjean ने कहा, संकलक निर्धारित करने के लिए कि क्या यह वस्तु सदस्य एक्सेसर या सरणी तत्व एक्सेसर बुलाना चाहिए असमर्थ है, literial 0 द्वारा:

GenericValue& operator[](const Ch* name) 
GenericValue& operator[](SizeType index) 

[0u] या [SizeType(0)] का उपयोग करके यह कार्य कर सकता है।

इस समस्या से निपटने का एक और तरीका ऑपरेटर [] के लिए अधिभारित संस्करण का उपयोग करना बंद कर दिया गया है। उदाहरण के लिए, एक प्रकार की पहुंच के लिए operator() का उपयोग करना। या सामान्य कार्यों का उपयोग, उदाहरण GetMember(), GetElement()। लेकिन मुझे अभी इस पर प्राथमिकता नहीं है। अन्य सुझावों का स्वागत है।

int i=0; 
cout<<"Key VALUE:"<<variable["first"]["next"][i]["key"].GetString()<<endl ; 

आउटपुट::

0

आप कोष्ठक के साथ इसे का उपयोग करना चाहते हैं, तो आप निम्न का उपयोग कर सकते कुंजी मान: important_value

यह मेरे लिए काम किया।

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