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都为假,则out_stringis { "somevalue" : null },但我希望它是一个空数组:{ "somevalue" : [ ] }

有谁知道如何实现这一目标?

非常感谢你!

4

3 回答 3

43

这里有两种方法可以做到:

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;

通过 writer 的输出将是:

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