1

我对 jsoncpp 有一个小问题。我正在构建一个字典列表,如果字典为空,我使用我得到的 writer 打印列表的结果

[{some value}, null].

如何让作家打印{}而不是null

4

1 回答 1

2

解决方案

使用带有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族显示值nullTypeasnull和类型objectValue为 as的空值{}(对于每个Json::Writer: 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("{}");
             (...)
    
于 2014-10-22T15:31:42.583 回答