2012-07-12 21 views
5

JSON dosyası şuna benzer:JsonCPP hatası getMemberNames() nasıl düzeltilir?

C++ dosya şuna benzer
{ 
"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" neden hatadır:

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

strings bir diziDeğeri, ben onu ValueType = 6 alarak onayladı.

cevap

5

Söylediğiniz gibi, dizeler, bir nesne değil, bir dizidir. Aşağıdakilerden birini yapmanız gerekir: (i) dizelerinizi json nesnesine dönüştürmek.

Varolan kodunuz iyi durumda olacaktır. Bu, ayrıştırmakta olduğun jsonun kontrolüne sahip olursanız yapacağım şey.

veya (ii) dizeleri dizisi üzerinde yineleme - json bazı merkezlerinde parti tarafından belirtilmişse sadece bu yapardım - Böyle bir şey olacaktır:

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()); 
} 

Ancak gerçekte değerleri kullanarak Daha sonra dizeleri dizisindeki herhangi bir şeye erişmek için all_keys ağrılı olacak - bu yüzden anahtar/değer çiftlerini bir haritada saklamak isteyebilirsiniz. Veya en azından anahtarın bulunduğu dizge dizisinin dizinini saklayın. Ben bu arada, ben senin diğer çalışacağım, burada bu soruyu gönderdiniz

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

ilk cevap benim ideal çözüm, ama bu biçimi için benim PHP kodunu değiştirmek nasıl bulamadı çözümler :) http://stackoverflow.com/questions/11444171/php-to-json-format –

İlgili konular