Je tente d'analyser une chaîne JSON en utilisant Boost Spirit pour stocker l'objet JSON dans des structures de données récursives :
Value <== [null, bool, long, double, std::string, Array, Object];
Array <== [Value, Value, Value, ...];
Object <== ["nom1": Value, "nom2": Value, ...];
Et voici mon code :
#include
#include
#include
#include
#include
#include
struct JsonNull {};
struct JsonValue;
typedef std::map JsonObject;
typedef std::vector JsonArray;
struct JsonValue : boost::variant
{
};
JsonValue aval = JsonObject();
Lors de la compilation, j'obtiens l'erreur :
Erreur C2440 : 'initialisation' : impossible de convertir de 'std::map<_Kty,_Ty>' en 'JsonValue'
De plus, comment convertir en toute sécurité JsonValue en JsonObject ? Lorsque j'essaie :
boost::get(aval) = JsonObject();
Cela génère une exception/échec fatal à l'exécution.
Toute aide est grandement appréciée.
ÉDITER :
Suivant le conseil de @Nicol, j'en arrivé au code suivant :
struct JsonNull {};
struct JsonValue;
typedef std::map JsonObject;
typedef std::vector JsonArray;
typedef boost::variant<
JsonNull, bool, long, double, std::string,
JsonObject, JsonArray,
boost::recursive_wrapper
> JsonDataValue;
struct JsonValue
{
JsonDataValue data;
};
Je peux travailler sur JsonObject & JsonArray aussi facilement que ceci :
JsonValue *pJsonVal = new JsonValue();
boost::get(pCurrVal->data).insert(
std::pair("clé", pJsonVal)
);
boost::get(pCurrVal->data).push_back(pJsonVal);
Je poste ceci afin que tout le monde puisse en bénéficier.