web-dev-qa-db-fra.com

Créer une matrice JSON vide avec JSONCPP

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!

17
Martin Meeser

Vous pouvez le faire aussi de cette façon:

jsonRootValue["emptyArray"] = Json::Value(Json::arrayValue);
33
miso

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".

6
Ahmet Ipkin

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" = [] }         
3
Martin Meeser