【问题标题】:JsonCpp: How to get en empty object in a Json::Value?JsonCpp:如何在 Json::Value 中获取空对象?
【发布时间】:2015-04-24 15:11:26
【问题描述】:

我有一个接收Json::Value 作为参数的外部库。然后它将输出一个包含 JSON 结构的字符串,我在该结构中的某处传递了 Json::Value

我正在尝试在 Json::ValueJsonCpp 中放置一个空对象 {}

最终我试图从包含"{}"std::string 中解析那个空的JSON 对象,而我需要在Json::Value 中使用它。

当我声明一个 Json::Value 并且什么都不做并将它传递给我的库时,我得到 NULL 而不是 {}...

【问题讨论】:

  • 它到底在哪里失败了(通常的 json 解析)?你没有提到你的输出。
  • @Alex M. 更新了我的问题也许会有所帮助。什么都没有失败我只是想知道如何在 Json::Value 中加载我的字符串(包含一个空对象 {})...

标签: c++ jsoncpp


【解决方案1】:

这可能对某人有帮助: 在当前版本中。我正在使用 - 1.8.2,你可以像这样得到空对象:

Json::Value root;
root = Json::objectValue;

【讨论】:

  • 我需要进行类似的操作。我有一个现有的根,它需要一个命名的空对象(动态地,存在填充数据不可用的情况)。由于遗留原因,一个命名为 null 的孩子不会削减它。由于上面的答案,我从各种愚蠢变成了这个甜蜜,优雅的代码:Json::Value& sub_root = root["name"] = Json::objectValue; 然后我可以填充 sub_root 或将其留空,接收者会做正确的事情。这是从 ad-hoc JSON 构造到使用 JSONcpp 的转换。很高兴。上面的答案应该是被接受的。
【解决方案2】:

示例:

Json::Value root;
Json::Reader reader;
reader.parse("{}", root);
assert(root != Json::nullValue);
std::string someStr = Json::FastWriter().write(root);
assert(someStr == "{}\n");

所有的断言都通过了,所以解析的对象没有空值,当你把它写回字符串时,你会得到你的空对象"{}"。这对您不起作用吗?

【讨论】:

  • 就在您发布答案之前,我发现this article 大致相同,最后是我调用的库,它将空 JSON {} 转换为 NULL。接受作为答案,因为这是我最初想知道的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2023-03-16
  • 2013-12-28
相关资源
最近更新 更多