Создать пустой массив json с помощью jsoncpp

У меня есть следующий код:

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»: []}

Кто-нибудь знает, как этого добиться?

Большое спасибо!

14

Решение

Вы можете сделать это также так:

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

Другие решения

Вы можете сделать это, определив объект Value как «объект Array» (по умолчанию он делает его объектом «object», поэтому ваш член становится «нулевым», когда не выполняется присваивание вместо [])

Итак, переключите эту строку:

 Json::Value jsonValue;
myMethod(jsonValue);

с этим:

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

И вуаля! Обратите внимание, что вы можете изменить «arrayValue» на любой тип (объект, строка, массив, int и т. Д.), Чтобы сделать объект этого типа. Как я уже говорил, по умолчанию это «объект».

6

Ладно, я понял. Это немного раздражает, но все-таки довольно легко.
Чтобы создать пустой массив json с помощью jsoncpp:

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

Вывод через писателя будет:

{ "emptyArray" = [] }
3
По вопросам рекламы [email protected]