我有以下代码:
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”:[]}
有人知道如何实现这个目标吗?
非常感谢!
答案 0 :(得分:32)
你也可以这样做:
jsonRootValue["emptyArray"] = Json::Value(Json::arrayValue);
答案 1 :(得分:6)
您可以通过将Value对象定义为“Array对象”来执行此操作(默认情况下,它将其作为“对象”对象,这就是为什么您的成员在未进行任何分配时变为“null”而不是[])< / p>
所以,切换这一行:
Json::Value jsonValue;
myMethod(jsonValue);
用这个:
Json::Value jsonValue(Json::arrayValue);
myMethod(jsonValue);
瞧!请注意,您可以将“arrayValue”更改为您想要的任何类型(对象,字符串,数组,整数等)以生成该类型的对象。正如我之前所说,默认的是“对象”。
答案 2 :(得分:3)
好的,我明白了。这有点烦人但毕竟很容易。 使用jsoncpp:
创建一个空的json数组Json::Value jsonArray;
jsonArray.append(Json::Value::null);
jsonArray.clear();
jsonRootValue["emptyArray"] = jsonArray;
通过编写器的输出将是:
{ "emptyArray" = [] }