【问题标题】:How to check a value for null when using boost json ptree使用boost json ptree时如何检查null值
【发布时间】:2021-11-26 14:06:57
【问题描述】:

我从以下格式的服务器收到 json 响应:

{"value": 98.3}  

但有些情况下,响应可能是:

{"value": null}

我编写了一个 C++ 程序,它使用 boost json 来解析它并获取浮点值

#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>



using namespace std;
namespace pt = boost::property_tree;



int main(int argc, char **argv)
{
     try
     {
          float valuef;
          pt::ptree root;
          std::stringstream ss;
          string result;
          std::ifstream file("test.json");

          if (file)
          {
               ss << file.rdbuf();

               file.close();
          }
          pt::read_json(ss, root);
          auto value  = root.get<string>("value");
          if (value != "null")
          {
               valuef = stof(value);
          }
          cout <<"float value is" << valuef << endl;

     }

     catch (std::exception &e)
     {
          string err = e.what();
          cout << "error is " << endl
               << err << endl;
     }
}

所以我总是检查该值是否与文字“null”不相等,因为根据此
Boost Json with null elements 不支持输出空值。
由于这篇文章已有 7 年的历史,我想知道最新的 boost 库是否支持更通用的东西来检查空值?

【问题讨论】:

    标签: c++ json boost null


    【解决方案1】:

    使用boost/property_tree/json_parser.hpp,你只能像你说的那样检查字符串版本:

    所以我总是检查值是否与文字“null”不相等,因为根据这个 Boost Json with null elements 不支持输出空值。

    不过,由于boost version 1.75.0,您也可以使用boost/json.hpp 处理JSON 对象。

    解析后的 JSON 对象现在是 json::value 类型,类型由 json::kind 指定。见boost.org's example

    因此,使用value,您可以执行以下操作:

    // jv is a value from a kvp-pair
    if(jv.is_null()) {
     // Json value is null
    }
    

    有关实现细节,请参阅 boost 的示例。

    【讨论】:

    • 感谢您建议使用合适的 JSON 库!
    【解决方案2】:

    没有。来自the documentation

    JSON 值映射到包含该值的节点。但是,所有类型信息都丢失了;数字,以及文字“null”、“true”和“false”都简单地映射到它们的字符串形式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2017-04-05
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多