c++ - 通过使用boost属性树解析JSON文件来访问 bool 值

标签 c++ json c++11 boost-propertytree boost-iterators

下面是我从JSON文件获取值的步骤:

{
  "Bases":[
    {
      "mnemonic":"ADIS.LA.01",
      "relay":true
    },
    {
      "mnemonic":"ALEX.LA.01",
      "relay":true
    }
  ]
}

我无法获取 bool(boolean) 值。

在下面的代码中,我是:
  • 打开JSON文件
  • 设置根元素并开始遍历此根元素下的子树(基本)
  • 获取每个标签的值并将其保存为适当的变量类型。

  • 码:
    ReadJsonFile()
    {
        using boost::property_tree::ptree;
        const boost::property_tree::ptree& propTree
        boost::property_tree::read_json(ss, pt);
        const std::string rootElement = "Bases"; 
        boost::property_tree::ptree childTree;
        bool m_relay;
        try
        {
            /** get_child - Get the child at the given path, or throw @c ptree_bad_path. */
            childTree = propTree.get_child(rootElement);
        }
        catch (boost::property_tree::ptree_bad_path& ex)
        {
            return false;
        }
    
        BOOST_FOREACH(const boost::property_tree::ptree::value_type &v, propTree.get_child(rootElement)){
           string vID;
           for (ptree::const_iterator subTreeIt = v.second.begin(); subTreeIt != v.second.end(); ++subTreeIt) {
              if (subTreeIt->first == "mnemonic")
              {
                 // Get the value string and trim the extra spaces, if any
                 vID = boost::algorithm::trim_copy( subTreeIt->second.data() );
              }
              if (subTreeIt->first == "relay")
              {
                m_relay = boost::algorithm::trim_copy(subTreeIt->second.data());
              }
           }
        }
     }
    

    错误:

    error: cannot convert ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >’ to ‘bool’ in assignment



    显然, bool(boolean) 值"relay":true被视为字符串而不是bool

    如果我改变
    bool m_relay;
    


    std::string m_relay;
    

    该代码可以正常工作,但是bool类型无法编译。

    我想念什么吗?

    最佳答案

    尝试使用此:

    m_relay = subTreeIt->second.get_value<bool>();
    

    代替这个:
    m_relay = boost::algorithm::trim_copy(subTreeIt->second.data());
    

    关于c++ - 通过使用boost属性树解析JSON文件来访问 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44159507/

    相关文章:

    c++ - C++中如何将输入的字符串放入字符数组?

    c++ - 返回指向 vector 中项目的指针(来自迭代器)

    json - 将多维 JSON 文件映射到 Go 结构

    c++ - 使用 Stack 时的段错误到底是什么以及如何修复它?

    c++ - C++ 队列中的线程池

    c++ - s[i]^=32 是如何将大写转换为小写的?

    java - 如何使用 Jackson JSON 将值存储到 Java

    asp.net - 发送 AJAX 请求到 .aspx 页面并返回 JSON

    c++ - 如何存储从 std::bind 返回的可调用对象以获取指向成员函数的指针?

    c++ - 使用 Android Studio 构建共享 *.so 库的发布版本