c++ 使用boost::json访问嵌套JSON时出错?

kcwpcxri  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(131)

使用以下JSON:

{
    type: "test",
    version: 1,
    data: {
        name: "omni",
        id: "123",
        value: 3
    }
}

字符串
我尝试使用2个C++函数获取其数据:

void process_data(std::string type, std::string data)
{
        boost::json::value data = boost::json::parse(data);
        std::string name = json.at("name").as_string().c_str();
        std::string id = json.at("id").as_string().c_str();
        int value = json.at("value").as_int64();

        std::cout << "Message data content:" << std::endl;
        std::cout << "Name: " << name << std::endl;
        std::cout << "Id: " << id << std::endl;
        std::cout << "Value: " << value << std::endl;
}

void process_message(std::string payload)
{
        boost::json::value json = boost::json::parse(payload);
        std::string type = json.at("type").as_string().c_str();
        int version = json.at("version").as_int64();

        std::cout << "Message received:" << std::endl;
        std::cout << "Type: " << type << std::endl;
        std::cout << "Version: " << version << std::endl;

        std::string data = json.at("data").as_string().c_str(); !!! Getting error here
        process_data(data);
}


解析data时出现以下错误:

terminate called after throwing an instance of 'boost::wrapexcept<std::invalid_argument>'
  what():  not a string
Aborted (core dumped)


有办法解决吗?

whitzsjs

whitzsjs1#

你不能像对待字符串一样对待JSON对象。正如评论者所说,序列化它:

std::string data = serialize(json.at("data"));

字符串
然而,序列化是一种反模式,除非你打算通过(文本)协议发送。相反,传递json值:

process_data(json.at(“data”));


最好的部分是,它将包括类型,如果它的变量。

相关问题