【问题标题】:Need to print empty dictionary as {} instead of null in jsoncpp需要在 jsoncpp 中将空字典打印为 {} 而不是 null
【发布时间】:2013-11-22 09:16:16
【问题描述】:

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

[{some value}, null].

如何让 writer 打印 {} 而不是 null

【问题讨论】:

  • AFAIK 默认构造的 Json::Value 将输出为 {}

标签: c++ dictionary jsoncpp


【解决方案1】:

解决方案

使用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 类族将 nullType 的值显示为 nullobjectValue 类型为 {} 的空值(对于每个 Json::Writer 为 true:StyledWriterStyledStreamWriterFastWriter

  • 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("{}");
             (...)
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多