Création de tableaux JSON dans Boost en utilisant la Propriété des Arbres
Je suis en train de créer un tableau JSON à l'aide de boost propriété des arbres.
La la documentation dit: "JSON tableaux sont mappés à des nœuds. Chaque élément est un nœud enfant avec un nom vide."
Donc je voudrais créer une propriété de l'arbre avec vide noms, puis d'appeler write_json(...)
pour obtenir la matrice de sortie. Toutefois, la documentation n'est pas dis-moi comment faire pour créer sans nom nœuds enfants. J'ai essayé ptree.add_child("", value)
, mais cela donne:
Assertion `!p.empty() && "Empty path not allowed for put_child."' failed
La documentation ne semble pas aborder ce point, au moins pas de toute façon je peux comprendre. Quelqu'un peut-il aider?
Vous devez vous connecter pour publier un commentaire.
Tableau Simple:
résultats dans:
Tableau sur les Objets:
résultats dans:
espère que cette aide
Ce que vous devez faire est de cette pièce de plaisir. C'est à partir de la mémoire, mais quelque chose comme cela fonctionne pour moi.
Mais attention il y a plusieurs bugs dans le json l'analyse et de l'écriture. Plusieurs de qui je l'ai soumis des rapports de bogues pour - avec pas de réponse 🙁
EDIT: à l'adresse de souci, c'sérialisation de manière incorrecte en tant que {"":"","":""}
Cela se produit uniquement lorsque le tableau est l'élément racine. Le coup de pouce ptree écrivain traite tous les éléments racines comme des objets - ne jamais tableaux ou des valeurs. Ceci est causé par la ligne suivante dans boost/propert_tree/detail/json_parser_writer.php
Se débarrasser de la "tiret > 0 &&" permettra d'écrire des tableaux correctement.
Si vous n'aimez pas la façon dont l'espace est produit, vous pouvez utiliser le patch que j'ai fourni ici
pretty=false
là? Il fonctionne, mais la valeur par défaut danswrite_json
est à-peu-près d'impression.Lors du démarrage d'utilisation de la Propriété de l'Arbre pour représenter une structure JSON, j'ai rencontré des problèmes similaires que je n'ai pas de résoudre. Notez aussi qu'à partir de la documentation, de la propriété de l'arbre n'est pas entièrement en charge les informations de type:
Après avoir appris cela, je suis passé à la plus complète JSON mise en œuvre JSON Esprit. Cette bibliothèque utilise Boost Esprit pour le JSON de la grammaire de la mise en œuvre et soutient pleinement JSON y compris les tableaux.
Je vous suggère d'utiliser une variante C++ JSON mise en œuvre.
Dans mon cas, je voulais ajouter un tableau à une plus ou moins arbitraire, de sorte que, à l'instar de Michael réponse, créez un enfant un arbre et de le remplir avec les éléments du tableau:
Lorsque l'enfant a été rempli, l'utilisation de la
put_child()
ouadd_child()
fonction pour ajouter la totalité de l'enfant de l'arbre à l'arbre, comme ça...la put_child fonction prend un chemin d'accès et un arbre pour un argument et "la greffe" arrayChild en targetTree
De
boost 1.60.0
, le problème persiste.Offrant un
Python 3
solution de contournement (Gist), qui peut être syscalled juste aprèsboost::property_tree::write_json
.