20

次のコードがあります。

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

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

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

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

4

3 に答える 3

43

これを行うには、次の 2 つの方法があります。

jsonRootValue["emptyArray"] = Json::Value(Json::arrayValue);
// or 
jsonRootValue["emptyArray"] = Json::arrayValue;
于 2013-02-28T13:36:44.690 に答える
7

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

したがって、次の行を切り替えます。

 Json::Value jsonValue;
 myMethod(jsonValue);

これとともに:

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

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

于 2013-03-04T09:28:28.110 に答える
4

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

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

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

{ "emptyArray" = [] }         
于 2012-11-28T16:18:28.850 に答える