需要在jsoncpp中将空字典打印为{},而不是null

Need to print empty dictionary as {} instead of null in jsoncpp

本文关键字:null 打印 jsoncpp 字典      更新时间:2023-10-16

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

[{some value}, null].

如何使编写器打印{}而不是null

解决方案

使用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::nullTypeJson::Writer类族显示值,其中nullTypenull类型为objectValue的空值为{}(对于每个Json::Writer:StyledWriterStyledStreamWriterFastWriter为真。

  • Json::Value的defalt构造函数,Json第212行/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("{}");
             (...)