我需要能夠讀取現有的JSON文件,對其進行修改(例如替換,移除和添加對象,數組和鍵值對),然後再次將文件寫出。Qt修改JSON文件
我一直想讀,寫與這些內容的JSON文件:
{
"array": [
{
"name": "Channel",
"default": 1
},
{
"name": "Size",
"default": 457
}
]
}
我讀成功的文件,但在不使用下面的代碼做出任何更改:
QFile File("/path/to/myfile.json");
File.open(QIODevice::ReadOnly | QIODevice::Text);
QJsonParseError JsonParseError;
QJsonDocument JsonDocument = QJsonDocument::fromJson(File.readAll(), &JsonParseError);
File.close();
QJsonObject RootObject = JsonDocument.object();
QJsonArray Array = RootObject.value("array").toArray();
QJsonObject ElementOneObject = Array.at(0).toObject();
ElementOneObject.insert("key", QJsonValue(QString("value")));
ElementOneObject.insert("name", QJsonValue(QString("David")));
File.open(QFile::WriteOnly | QFile::Text | QFile::Truncate);
File.write(JsonDocument.toJson());
File.close();
我期待看到數組的第一個元素具有新名稱「David」和一個新的鍵值對,如"key" : "value"
。此代碼運行後,文件內容相同。我知道文件已被寫出,因爲鍵值對的排序已被更改爲排序爲字母順序的鍵排序。
如何獲取文件以反映我嘗試進行的更改?
我以前嘗試過setObject(),但這還不夠。我認爲問題在於RootObject是一個副本,然後你得到了Array,這也是一個副本,然後你從該數組中獲得一個元素,這也是一個副本!如果我在最後這樣做了,我有它的工作: Array.takeAt(0); Array.insert(0,ElementOneObject); RootObject.insert(「array」,Array); JsonDocument.setObject(RootObject); 雖然這看起來有點瘋狂! – oggmonster
一旦獲得根對象,如果使用find函數,它會將迭代器返回到該鍵的實際數據。這應該允許您在最後調用setObject之前直接更改數據。 – TheDarkKnight