2012-07-12 16 views
5

JSON फ़ाइल इस तरह दिखता है:getMemberNames() से JsonCPP त्रुटि को कैसे ठीक करें?

{ 
"strings": [ 
    { 
     "key_one": "value_one!" 
    }, 
    { 
     "key_two": "value_two!" 
    }, 
    ] 
} 

सी ++ फ़ाइल इस तरह दिखता है:

Json::Value root; 
Json::Reader reader; 
bool parsingSuccessful = reader.parse(contents, root); 
const Json::Value strings = root["strings"]; 
std::vector<std::string> list = strings.getMemberNames(); 

") strings.getMemberNames (" की वजह से त्रुटि है:

Assertion failed: (type_ == nullValue || type_ == objectValue), function getMemberNames, file /projects/.../jsoncpp.cpp, 

strings एक सरणी है, मैंने इसे ValueType = 6 प्राप्त करके पुष्टि की।

उत्तर

5

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

{ 
"strings": { 
     "key_one": "value_one!", 
     "key_two": "value_two!" 
    } 
} 

इस मामले में आपका मौजूदा कोड ठीक होगा। अगर आप जेसन पर नियंत्रण रखते हैं तो मैं यही करूँगा।

या (ii) तार सरणी पर दोहराएं - अगर json कुछ तृतीय पक्ष द्वारा निर्दिष्ट किया जाता मैं केवल यह कर चाहते हैं - यह कुछ इस तरह दिखेगा: हालांकि वास्तव में में मानों का उपयोग

std::vector<std::string> all_keys; 
for (int index = 0; index < strings.size(); ++index) { 
    std::vector<std::string> cur_keys = strings[index].getMemberNames(); 
    all_keys.insert(all_keys.end(), cur_keys.begin(), cur_keys.end()); 
} 

स्ट्रिंग्स सरणी में कुछ भी एक्सेस करने के लिए all_keys दर्दनाक होने जा रहा है - इसलिए आप मानचित्र में कुंजी-मूल्य जोड़े को स्टोर करना चाहेंगे।

std::map<std::string,std::string> key_values; 
for (int index = 0; index < strings.size(); ++index) { 
    std::vector<std::string> cur_keys = strings[index].getMemberNames(); 
    for(int j=0; j<cur_keys.size(); ++j) 
     key_values[cur_keys[j]] = ... 
} 

या कम से कम स्ट्रिंग सरणी के सूचकांक को संग्रहीत करें जहां कुंजी मिली थी।

std::vector<std::pair<int,std::string> > all_keys; std::vector<std::string> all_keys; 
for (int index = 0; index < strings.size(); ++index) { 
    std::vector<std::string> cur_keys = strings[index].getMemberNames(); 
    for(int j=0; j<cur_keys.size(); ++j) 
     all_keys.push_back(std::make_pair(index, cur_keys[j])); 
} 
+0

आपका पहला उत्तर मेरा आदर्श समाधान था, लेकिन मुझे यह पता नहीं चला कि मेरे प्रारूप में मेरे PHP कोड को कैसे संशोधित किया जाए, मैंने इस प्रश्न को यहां पोस्ट किया है, इस बीच, मैं आपके दूसरे की कोशिश करूंगा समाधान :) http://stackoverflow.com/questions/11444171/php-to-json-format –

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