如何解决Rapidjson 返回错误数据
我收到的json:
{
"status": "success","data": {
"user_id": "acv","user_type": "individual","email": "abc@xyz.com","user_name": "xyz","user_shortname": "xx","broker": "zzzz","exchanges": [
"aaa","cvv","bbb","sss","MF","eee"
],"products": [
"CNC","Nrml","MIS","BO","CO"
],"order_types": [
"MARKET","LIMIT","SL","SL-M"
],"avatar_url": "","Meta": {
"demat_consent": "consent"
}
}
}
我有一个解析接收到的 json 的函数:
(rj
只不过是一个命名空间别名,声明为 using rj=rapidjson;
)
rj::Value& parser(...){
rj::Document data;
data.Parse("data received passed as const char*");
//------can access correct email string here------
std::string debugstr = data["data"].Getobject()["email"].GetString();
return data["data"];
}
我使用它:
void func1(){
rj::Value::Object res = parser().Getobject();
//-----this string for some reason is "\003"------
std::string debugstr = res["email"].GetString();
}
为什么会这样?我已经运行了多次。我在 Linux 上使用最新的 Rapidjson。
与电子邮件字段类似,我也无法正确访问其他值。只有一个 (broker
) 是正确的,而其他是空字符串或随机垃圾。
解决方法
我对这个库不是很熟悉,但问题似乎出在这里
rj::Value& parser(...){
...
return data["data"];
}
您正在返回对 data
变量内部的引用。但是 data
变量是 parser
的局部变量,并且会在 parser
退出时被销毁。所以你最终得到了一个被销毁的对象的引用。这解释了垃圾值。
尝试返回一个值
rj::Value parser(...){
(我假设rapidjson 库可以做到这一点)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。