web-dev-qa-db-ja.com

jsoncppで空のjson配列を作成する

私は次のコードを持っています:

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);
}

すべてのboolMarkersがfalseの場合、out_stringは{"somevalue":null}ですが、空の配列にしたい:{"somevalue":[]}

誰かがこれを達成する方法を知っていますか?

どうもありがとうございました!

17
Martin Meeser

次の方法でも行うことができます。

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

これを行うには、Valueオブジェクトを「配列オブジェクト」として定義します(デフォルトでは「オブジェクト」オブジェクトとして作成されるため、割り当てが行われない場合、メンバーは[]ではなく「null」になります)。

したがって、この行を切り替えます:

 Json::Value jsonValue;
 myMethod(jsonValue);

これとともに:

Json::Value jsonValue(Json::arrayValue);
myMethod(jsonValue);

そして出来上がり! 「arrayValue」を任意の型(オブジェクト、文字列、配列、intなど)に変更して、その型のオブジェクトを作成できることに注意してください。前に言ったように、デフォルトは「オブジェクト」です。

6
Ahmet Ipkin

はい、分かりました。少し面倒ですが結局簡単です。 jsoncppで空のjson配列を作成するには:

Json::Value jsonArray;
jsonArray.append(Json::Value::null);
jsonArray.clear();
jsonRootValue["emptyArray"] = jsonArray;

ライターによる出力は次のようになります。

{ "emptyArray" = [] }         
3
Martin Meeser