首页 文章

使用boost序列化和反序列化json

提问于
浏览
58

我是 c++ 的新手 . 使用 boost 序列化和反序列化 std::Map 类型数据的最简单方法是什么?我找到了一些使用 PropertyTree 的例子,但它们对我来说很模糊 .

1 回答

  • 85

    请注意 property_tree 将密钥解释为路径,例如放置对"a.b" = "z"将创建一个{"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();
    }
    

相关问题