使用以下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)
型
有办法解决吗?
1条答案
按热度按时间whitzsjs1#
你不能像对待字符串一样对待JSON对象。正如评论者所说,序列化它:
字符串
然而,序列化是一种反模式,除非你打算通过(文本)协议发送。相反,传递json值:
型
最好的部分是,它将包括类型,如果它的变量。