J'ai le code suivant:
void MyClass::myMethod(Json::Value& jsonValue_ref)
{
for (int i = 0; i <= m_stringList.size(); i++)
{
if (m_boolMarkerList[i])
{
jsonValue_ref.append(stringList[i]);
}
}
}
void MyClass::myOuterMethod()
{
Json::Value jsonRoot;
Json::Value jsonValue;
myMethod(jsonValue);
jsonRoot["somevalue"] = jsonValue;
Json::StyledWriter writer;
std::string out_string = writer.write(jsonRoot);
}
Si tous les boectmarkers sont faux, le out_string est {"quelqueévalue": null} mais je veux que ce soit un tableau vide: {"Quelconvalue": []}
Quelqu'un sait-il comment y parvenir?
Merci beaucoup!
Vous pouvez le faire aussi de cette façon:
jsonRootValue["emptyArray"] = Json::Value(Json::arrayValue);
Vous pouvez le faire en définissant l'objet de valeur sous la forme d'un "objet Array" (par défaut, il en fait un objet "Objet", c'est pourquoi votre membre devient "NULL" lorsqu'il n'y a aucune mission faite, au lieu de []).
Alors, passez cette ligne:
Json::Value jsonValue;
myMethod(jsonValue);
avec ça:
Json::Value jsonValue(Json::arrayValue);
myMethod(jsonValue);
Et voila! Notez que vous pouvez modifier "ArrayValue" sur n'importe quel type que vous souhaitez (objet, chaîne, tableau, int, etc.) pour faire un objet de ce type. Comme je l'ai déjà dit, le défaut est "objet".
OK j'ai compris. C'est un peu ennuyeux mais c'est assez facile après tout. Pour créer un réseau JSON vide avec JSONCPP:
Json::Value jsonArray;
jsonArray.append(Json::Value::null);
jsonArray.clear();
jsonRootValue["emptyArray"] = jsonArray;
La sortie via écrivain sera:
{ "emptyArray" = [] }