Comment créer un noeud de tableau vide à l’aide de boost property_tree of json parser

J’essaie de créer un noeud de tableau dans JSON, dont le résultat est le suivant:

{ node: ["12", "13"] } 

mais quand array est vide, il va afficher ceci:

 { node: "" } 

ce n’est pas ce que je veux, j’ai besoin de ça:

 { node: [] } 

Comment puis je faire ça ? Et je n’ai pas besoin de guillemets (“”) autour des chiffres. Quelqu’un peut-il aider?

Mon code est comme ci-dessous:

 boost::property_tree::ptree pt; boost::property_tree::ptree array; for (vector::const_iterator iter = v.begin(); iter != v.end(); ++iter) { boost::property_tree::ptree node; node.put("code", *iter); array.push_back(std::make_pair("", node)); } pt.add_child("array", array); 

Merci de votre attention.

Boost n’a pas de bibliothèque JSON. Il a une bibliothèque de propriétés (think: formats de configuration hiérarchiques).

documentation: http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree/parsers.html#property_tree.parsers.json_parser

Il indique spécifiquement que certaines choses ne sont pas bien supscopes:

  • les tableaux en JSON sont un hack (vous ne pouvez pas représenter le tableau vide)
  • toutes les informations de type sont perdues (tout doit être une chaîne JSON)

Cela convient aux domaines d’application prévus pour Boost PropertyTree. Si cela ne vous convient pas, utilisez une bibliothèque JSON.

Cette réponse suppose que vous ferez ultérieurement une chaîne de votre arbre de propriétés. J’ai trouvé un peu de solution de contournement pour ce genre de situation. Au lieu de créer

 { "node": "" } 

vous pouvez facilement créer

 { "node": [""] } 

en faisant

 ptree parent_tree, children, child; children.push_back(std::make_pair("", child)); pt.add_child("node", children); 

Plus tard, lorsque vous aurez une représentation sous forme de chaîne de votre JSON, vous pourrez remplacer les caractères [""] par [] . Pour cela, il vous suffit de faire:

 #include  boost::replace_all(json_ssortingng, "[\"\"]", "[]"); 

De cette façon, vous vous retrouverez avec une chaîne contenant

 { "node": [] } 

J’espère que cela t’aides.