c++ - How to fix JsonCPP error from getMemberNames()? -
JSON फ़ाइल इस तरह दिखती है:
{"string": [{"key_one ":" मूल्य_एक! " }, {"Key_two": "value_two!" },]} सी ++ फ़ाइल इस तरह दिखती है:
जेसन :: मान रूट; जेसन :: रीडर रीडर; Bool parsingSuccessful = reader.parse (सामग्री, रूट); Const जेसन :: मान स्ट्रिंग = रूट ["तार"]; std :: वेक्टर & LT; std :: स्ट्रिंग & gt; सूची = स्ट्रिंग्स.गेटमेनबार (); "Strings.getMemberNames ()" के कारण त्रुटि है: प्रविष्टि विफल: (type_ == nullValue || type_ == objectValue), समारोह getMemberNames, file /projects/.../jsoncpp.cpp,
स्ट्रिंग एक arrayValue है, मैंने इसे ValueType = 6 प्राप्त करने की पुष्टि की है ।
जैसा कि आप कहते हैं, तार एक सरणी है, एक वस्तु नहीं आपको या तो कुछ करना चाहिए: (i) अपने तार json को ऑब्जेक्ट में परिवर्तित करना।
{"string": {"key_one": "value_one!", "Key_two": "value_two!" }} उस स्थिति में आपका मौजूदा कोड ठीक होगा। यह है कि मैं क्या करूँगा यदि आपके पास जेएसन पर नियंत्रण है जो आप पार्सिंग कर रहे हैं।
या (ii) तारों के सरणी पर इटरेट - मैं केवल ऐसा करता हूं अगर कुछ थ्रित पार्टी - ऐसा कुछ दिखाई देगा:
std :: vector & lt; std :: string & gt; all_keys; (इंट इंडेक्स = 0; इंडेक्स & lt; स्ट्रिंग.size (); ++ इंडेक्स के लिए) {std :: vector & lt; std :: string & gt; Cur_keys = तार [अनुक्रमणिका] .getMemberNames (); All_keys.insert (all_keys.end), cur_keys.begin (), cur_keys.end ()); } हालांकि स्ट्रिंग सरणी में कुछ भी एक्सेस करने के लिए वास्तव में all_keys में मानों का उपयोग करने के बाद दर्दनाक होगा - इसलिए आप किसी मैप में कुंजी-मान जोड़े को संग्रहीत करना चाह सकते हैं।
std :: map & lt; std :: string, std :: string & gt; key_values; (इंट इंडेक्स = 0; इंडेक्स & lt; स्ट्रिंग.size (); ++ इंडेक्स के लिए) {std :: vector & lt; std :: string & gt; Cur_keys = तार [अनुक्रमणिका] .getMemberNames (); के लिए (int j = 0; j & lt; cur_keys.size (); ++ j) key_values [cur_keys [j]] = ...} या कम से कम स्ट्रिंग सरणी जहां कुंजी मिली थी।
std :: vector & lt; std :: pair & lt; int, std :: string & gt; & Gt; all_keys; std :: वेक्टर & LT; std :: स्ट्रिंग & gt; all_keys; (इंट इंडेक्स = 0; इंडेक्स & lt; स्ट्रिंग.size (); ++ इंडेक्स के लिए) {std :: vector & lt; std :: string & gt; Cur_keys = तार [अनुक्रमणिका] .getMemberNames (); के लिए (int j = 0; j & lt; cur_keys.size (); ++ j) all_keys.push_back (std :: make_pair (सूचकांक, cur_keys [j])); }
Comments
Post a Comment