c++ - QJsonObject::insert 与直接赋值给 QJsonValueRef 相比?

标签 c++ json qt

我在 Qt 中使用 JSON 已经有一段时间了,而且我总是按照 example 中显示的方式使用它。 .但是,我想知道在将项目添加到 QJsonObject 时,直接分配给 QJsonValueRef 与使用 QJsonObject::insert 之间是否真的有区别? ,即这些行:

  • json["name"] = mName;
  • json.insert("name", mName);

有任何不同还是只是编码风格的问题?

最佳答案

从概念上讲,它是不同的。 operator[](const QString &key) 返回对 指向的 JSON value 的引用(即不包括 key) key,而 insert 方法将添加/替换值,然后返回一个 iterator 到该值(即我们可以访问 keyvalue 通过迭代器)。因此,使用 operator[] 你只能获得对 key 指向的特定值的访问(引用),而当使用 insert 时,你得到一个 iterator 可用于访问元素(键,值)本身和 JSON 对象中的上一个/下一个(如果有)元素。

技术上,根据 the source code ,在operator[](const QString &key)中,首先会搜索key指向的值,如果存在,引用回来。如果该值不存在,insert 将被调用,一个空的 QJSonValue() 作为第二个参数,然后将返回对该新值的引用。由于您对 operator[] 的调用之后是值修改,因此这两个操作的效果将是相同的,即它将 mValue 分配给具有键 “名称”

关于c++ - QJsonObject::insert 与直接赋值给 QJsonValueRef 相比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44664016/

相关文章:

c++ - 项目中无法识别代码块文件

c++ - 尝试使用宽字符串创建类时出现访问冲突

c++ - LINUX 或 WINDOWS 如何获取操作系统信息?

c++ - QT - 检测按下了哪个按钮

javascript - 检索纯文本 JSON,插入到 JavaScript

c++ - 使用 QDataStream 的 Qt 序列化 bool 值

c++ - PRNG库支持存储/恢复排序状态?

c++ - 在哪里可以看到发布者发送的输出数据?

ios - json数组字符串转换为nsmutablearray

javascript - 谷歌地图 API : Want geolocation to click automatically on data layer below