71 votes

Sérialisation et désérialisation de JSON avec boost

Je suis débutant à c++ . Quel est le moyen le plus simple de sérialiser et de désérialiser les données de type std::Map utilisant boost . J'ai trouvé quelques exemples d'utilisation de PropertyTree mais ils sont obscurs pour moi.

96voto

ArtemGr Points 2659

Notez que property_tree interprète les clés comme des chemins, par exemple, mettre la paire "ab" = "z" créera un {"a": {"b": "z"}} JSON, pas un {" ab ":" z "}. Sinon, utiliser property_tree est trivial. Voici un petit exemple.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X