【发布时间】:2013-11-22 09:16:16
【问题描述】:
我对 jsoncpp 有一点小问题。我正在构建一个字典列表,如果字典为空,我使用 writer 打印列表的结果,我得到 p>
[{some value}, null].
如何让 writer 打印 {} 而不是 null?
【问题讨论】:
-
AFAIK 默认构造的 Json::Value 将输出为 {}
标签: c++ dictionary jsoncpp
我对 jsoncpp 有一点小问题。我正在构建一个字典列表,如果字典为空,我使用 writer 打印列表的结果,我得到 p>
[{some value}, null].
如何让 writer 打印 {} 而不是 null?
【问题讨论】:
标签: c++ dictionary jsoncpp
使用Json::Value 构造函数,它接受一个参数Json::ValueType::objectValue(如文档中所述:JsonCpp Doc/Json::Value)。
Json::Value value;
value["list"][0] = Json::Value(Json::ValueType::objectValue);
value["list"][1] = Json::Value();
cout << value.toStyledString() << endl;
上面的代码打印出来:
{
"list" : [ {}, null ]
}
Json::Value 类的默认构造函数使用默认参数值Json::ValueType::nullType。 Json::Writer 类族将 nullType 的值显示为 null 和
objectValue 类型为 {} 的空值(对于每个 Json::Writer 为 true:StyledWriter、StyledStreamWriter、FastWriter。
Json::Value 的默认构造函数,第 212 行 Json/value.h@github:
namespace Json {
class JSON_API Value {
Value(ValueType type = nullValue); // line: 212
(...)
这里StyledWriter 在行动,第 263-290 行 json_writer.cpp@github:
void StyledWriter::writeValue(const Value& value) {
switch (value.type()) {
case nullValue:
pushValue("null");
(...)
case objectValue: {
Value::Members members(value.getMemberNames());
if (members.empty())
pushValue("{}");
(...)
【讨论】: