我需要能够读取现有的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