加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

rapidjson走过的坑

发布时间:2020-12-16 18:54:46 所属栏目:百科 来源:网络整理
导读:话说rapidjson使用起来极其不方便,没有想java那样方便快捷,于是自己动手封装,简单代码如下,重点将一些走过的坑 rapidjson::Document m_document; m_document.SetObject(); //写入字符串 rapidjson::Value p_name(rapidjson::kStringType);p_name.SetStri

话说rapidjson使用起来极其不方便,没有想java那样方便快捷,于是自己动手封装,简单代码如下,重点将一些走过的坑

rapidjson::Document m_document;
    m_document.SetObject();
    //写入字符串
    rapidjson::Value p_name(rapidjson::kStringType);
	p_name.SetString(key.c_str(),key.size(),m_document.GetAllocator());
	rapidjson::Value p_value(rapidjson::kStringType);
	p_value.SetString(value.c_str(),value.size(),m_document.GetAllocator());
    //
	m_document.AddMember(p_name,p_value,m_document.GetAllocator());
    //写入整型数
    rapidjson::Value p_name(rapidjson::kStringType);
	p_name.SetString(key.c_str(),m_document.GetAllocator());
	m_document.AddMember<int>(p_name,value,m_document.GetAllocator());
    //写入Object//写入Array,此处所有Object和Array都是继承自Value都可以当作Value直接写入
    rapidjson::Value p_name(rapidjson::kStringType);
	p_name.SetString(key.c_str(),m_document.GetAllocator());
	m_document.AddMember(p_name,Value/*value对象*/,m_document.GetAllocator());
    //读取代码,此处其他类型的数据获取类似,故省略
    string getString(const string& key)
    {
      auto iter = m_document.FindMember(key.c_str());
      return iter->value.GetString();
    }

然后我们来说说坑,整型数据都是数值拷贝所以没啥问题,但是字符串是符合数据类型就不同了,调用上会有区别,Value有提供两种重载函数来设置字符串

//此方法调试发现,传入第三个参数后最终会将字符串深拷贝处理,另外保存一份

Value.SetString(key.c_str(),m_document.GetAllocator());

//此方法没有传入上面的第三个参数,调试发现只是简单的对指针做了赋值操作,并没有任何拷贝,这就会导致字符串如果是局部变量会导致内存释放问题,这种方式的存在意义我猜测是为了外部管理字符串提供支持

Value.SetString(key.c_str(),key.size());

//SetObject方法是Value提供的,目的是清理当前对象,并且设置为指定对象类型,有setArray等等

Object对象是通过调用addMember函数添加键值对,但是Array方法是通过pushback来添加元素,这里有区别

m_document.SetObject();

看到这里希望大家能绕坑,有疑问可以留言探讨

下面附上,封装代码https://git.oschina.net/zi6xuan/coco2dx_rapidjson

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读