2012-09-12 17 views
55

के साथ जेसन को सीरियलाइजिंग और deserializing मैं c++ के लिए नौसिखिया हूँ। boost का उपयोग कर std::Map के डेटा को क्रमबद्ध और deserialize करने का सबसे आसान तरीका क्या है। मुझे PropertyTree का उपयोग करने के साथ कुछ उदाहरण मिल गए हैं लेकिन वे मेरे लिए अस्पष्ट हैं।बूस्ट

उत्तर

82

ध्यान दें कि property_tree कुंजी को पथ के रूप में व्याख्या करता है, उदा। जोड़ी "ए.बी" = "जेड" डालने से एक {"a": {"b": "z"}} JSON, {"a.b": "z"} नहीं होगा। अन्यथा, property_tree का उपयोग करना तुच्छ है। यहां एक छोटा सा उदाहरण है।

#include <sstream> 
#include <map> 
#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/json_parser.hpp> 

using boost::property_tree::ptree; 
using boost::property_tree::read_json; 
using boost::property_tree::write_json; 

void example() { 
    // Write json. 
    ptree pt; 
    pt.put ("foo", "bar"); 
    std::ostringstream buf; 
    write_json (buf, pt, false); 
    std::string json = buf.str(); // {"foo":"bar"} 

    // Read json. 
    ptree pt2; 
    std::istringstream is (json); 
    read_json (is, pt2); 
    std::string foo = pt2.get<std::string> ("foo"); 
} 

std::string map2json (const std::map<std::string, std::string>& map) { 
    ptree pt; 
    for (auto& entry: map) 
     pt.put (entry.first, entry.second); 
    std::ostringstream buf; 
    write_json (buf, pt, false); 
    return buf.str(); 
} 
+1

मैं इस कोशिश की (कम या ज्यादा पहली बार के लिए बूस्ट 1.57.0 का उपयोग कर), और वी.एस. 2013 मुझे C4512 चेतावनी देता है (असाइनमेंट ऑपरेटर उत्पन्न नहीं हो सकता है)। चेतावनियों को दबाने के अलावा, कोई कैसे हल करता है? – Dabbler

+0

@ डब्बलर: मुझे जीसीसी 4.9.1 ('g ++ -c -Wall -O2 -std = C++ 11 pt.cpp') के साथ कोई चेतावनी नहीं मिलती है। वीएस नहीं है गुगलिंग से भी मैं कहूंगा कि चेतावनी कहीं गहराई से आती है, क्योंकि दिए गए कोड में परिभाषित कोई वर्ग नहीं है। तो अपने प्रश्न का उत्तर देने के लिए, मुझे लगता है कि आपको चेतावनी को अलग करना चाहिए, यह जांचना चाहिए कि क्या यह बूस्ट कोड द्वारा property_tree में उत्पादित किया गया है, और यदि ऐसा होता है, तो संबंधित बूस्ट समस्या की तलाश करें, अगर कोई भी ऐसा नहीं करता है तो कोई नया मुद्दा दर्ज करना। सीएफ http://www.boost.org/development/bugs.html – ArtemGr

+0

ग्रेट उत्तर। सरणी के बारे में कैसे? – ar2015