La conversion de C++ de la classe JSON

J'aimerais créer une chaîne JSON contenant les variables d'instance de ma classe.

Par exemple,

class Example {  
    std::string string;  
    std::map<std::string, std:string> map;  
    std::vector<int> vector;  
};

devient:

{
    "string":"the-string-value",
    "map": {
        "key1":"val1",
        "key2":"val2"
    },
    "vector":[1,2,3,4]
}

J'ai regardé dans plusieurs bibliothèques C++ pour la création de JSON et ils ont tous l'air incroyablement complexe. J'aimerais quelque chose de semblable à du Javascript JSON.stringify(object). En d'autres mots, il suffit de passer un std::map, et obtenir une chaîne de caractères. La carte peut contenir d'autres cartes, des vecteurs, des listes, des chaînes, des nombres et des booléens.

Quelle est la meilleure façon de le faire?

Merci pour votre aide.

Modifier

J'ai regardé dans les éléments suivants:

json esprit, jsoncpp, zoolib, JOST, CAJUN, libjson, nosjob, JsonBox, jsonme--

Que je comprends, je peux construire un distinct objet JSON comme dans la réponse ci-dessous et de le convertir en JSON, je voudrais être en mesure de stocker mes affaires dans la norme des collections et de les convertir.

Edit 2

Bon, de la ferraille, l'idée de sérialisation d'une classe car il semble que c'est impossible avec le C++de manque de réflexion.

Est là une belle façon de convertir un std::map contenant std:cartes, std::vecteurs, std::des listes, des nombres, des chaînes et des booléens en JSON sans avoir à modifier les types de données ou de copier des données sur un nouveau type de données?

Grâce.

  • Qui bibliothèques avez-vous regardé? Donc, nous savons ce que vous trouvez complexes
  • Voir stackoverflow.com/questions/245973/whats-the-best-c-json-parser et stackoverflow.com/questions/6538725/... (maintenant supprimé; 10k+ uniquement)
  • J'ai mis à jour mon post. La complexité vient à avoir besoin de faire beaucoup de travail à faire quelque chose que je m'attends à être très simple. J'ai vraiment l'impression que je manque quelque chose, peut-être quelque chose d'évident.
  • Vous ne manquez de rien, ce n'est pas possible en C++ (dans la forme comme vous l'avez décrit).
  • Vous pouvez aller sur ce de la mauvaise façon. Cette "seulement" classes devrait probablement être un std::tuple; et vous devriez être en mesure de monter quelques modèles de l'action à la sortie d'une représentation JSON d'un tuple assez facilement.
  • Ce n'est pas un seulement des données de la classe, j'ai juste donné un exemple avec uniquement des données. Désolé. Une solution pour convertir un std::map contenant std::cartes, std::listes, std::les vecteurs, les numéros et les booléens en JSON serait bien aussi.
  • Il y a des bibliothèques qui peuvent le faire à l'aide d'adaptateurs. Voir cette réponse: stackoverflow.com/a/19957475/214777
  • Le même problème se présente à moi aujourd'hui. Espérons qu'il aide les stackoverflow.com/questions/26773043/...

InformationsquelleAutor tgt | 2011-11-21