关于c ++:使用Boost对JSON进行序列化和反序列化

Serializing and deserializing JSON with Boost

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


请注意,property_tree将密钥解释为路径,例如 把对"a.b"="z"放在一起会创建一个{"a":{"b":"z"}} JSON,而不是{"a.b":"z"}。 否则,使用property_tree是微不足道的。 这是一个小例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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();
}