我现在在Qt中使用JSON已经很长一段时间了,而且我总是按照它在example中的显示方式进行。但是,我想知道在向QJsonObject添加项目时,与 QJsonValueRef 的直接分配与使用QJsonObject::insert
之间是否存在实际差异,即这些行是:
json["name"] = mName;
json.insert("name", mName);
以任何方式不同或只是编码风格的问题?
答案 0 :(得分:3)
从概念上讲,它是不同的。 operator[](const QString &key)
会返回对value
所指向的JSON key
(即key
未包含)的引用,而insert
方法将添加/替换该值然后返回iterator
到值(即我们可以通过迭代器访问key
和value
。因此,使用operator[]
您只获得了key
指向的特定值的访问权限(引用),并且在使用insert
时,您获得了iterator
可用于访问JSON对象中的元素(键,值)本身和上一个/下一个(如果有)元素。
从技术上讲,根据the source code,在operator[](const QString &key)
中,首先会搜索key
指向的值,如果存在,将返回 。如果值不存在insert
将使用空QJSonValue()作为第二个参数调用,则将返回对此新值的引用。由于您对operator[]
的调用之后是值修改,因此相关操作的效果将相同,即它将mValue
分配给具有键"name"
的元素。