微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rapidjson 返回错误数据

如何解决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 举报,一经查实,本站将立刻删除。