2017-06-20 974 views
4

我現在在Qt中使用JSON的時間已經很長一段時間了,我總是按照它在example中顯示的方式進行操作。不過,我想知道,如果確實有這種直接分配到QJsonValueRef相比,增加項目時QJsonObject,即使用QJsonObject::insert之間的差異是這幾行:QJsonObject :: insert與直接賦值給QJsonValueRef比較?

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

不同以任何方式或它只是一個編碼風格的問題?

+2

那麼,如果它與'std :: map'類似,對'insert'的調用將不會替換使用索引操作符的現有鍵值對的值。 –

+0

@Captain Obvlious好吧,QJsonObject :: insert(http://doc.qt.io/qt-5/qjsonobject.html#insert)的文檔說明它會:「如果已經有一個關鍵鍵的項目,那麼該項目的值將被替換爲值。「 – scopchanov

+0

感謝您的快速響應,當然! – scopchanov

回答

3

概念上,它是不同的。所述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分配給具有密鑰"name"的元素。

+0

現在我明白了區別。這種見解揭示了它如何在幕後工作,至少對我來說是非常有幫助的。謝謝! – scopchanov