QJsonObject :: insert比较直接赋值给QJsonValueRef?

时间:2017-06-20 22:30:11

标签: c++ json qt

我现在在Qt中使用JSON已经很长一段时间了,而且我总是按照它在example中的显示方式进行。但是,我想知道在向QJsonObject添加项目时,与 QJsonValueRef 的直接分配与使用QJsonObject::insert之间是否存在实际差异,即这些行是:

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

以任何方式不同或只是编码风格的问题?

1 个答案:

答案 0 :(得分:3)

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

从技术上讲,根据the source code,在operator[](const QString &key)中,首先会搜索key指向的值,如果存在,将返回 。如果值不存在insert将使用空QJSonValue()作为第二个参数调用,则将返回对此新值的引用。由于您对operator[]的调用之后是值修改,因此相关操作的效果将相同,即它将mValue分配给具有键"name"的元素。