使用qt 5.3写入以前存在的json文件(包含对象数组和每个具有数组成员的对象)

时间:2014-06-12 03:48:51

标签: json qt

我正在使用QT 5.3。我已经阅读了在线介绍如何编写json文件的各种资料,但没有内容系统地逐步描述。

如果有人可以解释用简单语言编写json文件的逐步过程,那将非常有用,因为我是qt的新手。

在我的情况下,我有一个已存在“LOM.json”的json文件,其中包含一些内容。如何向此添加新数据。 { "LOM": [ { "LOM ID": 1, "Source": "Open Internet", "Content": "Complete Reference Java.pdf", "Difficulty Level": "Hard", "Type": "Text", "Length": "Long", "Topic-Proficiency": [ { "Topic": "Programming", "Proficiency": "E2" }, { "Topic": "Java", "Proficiency": "E3" } ] }, { "LOM ID": 2, "Source": "Open Internet", "Content": "www.LatexTutorial.com", "Difficulty Level": "Medium", "Type": "WebCourse", "Length": "Medium", "Topic-Proficiency": [ { "Topic": "Latex", "Proficiency": "E2" } ] } ] }

感谢。

2 个答案:

答案 0 :(得分:1)

您无法直接将数据插入文档的中间。您需要阅读该文档并再次将其写出来。让我们来看看我们如何做到这一点。

假设您发布的当前JSON在内存中作为QByteArray,您创建一个QJsonDocument: -

QJsonDocument doc = QJsonDocument::fromJson(data); // where data is the current JSON

如果我们想要将另一个LOM对象添加到数组中。我们得到第一个对象,即数组: -

QJsonObject rootObj = doc.object();
QJsonValue lomObj = rootObj.value("LOM");

if(!lomObj.isArray())
{
    // array expected - handle error
}

QJsonArray lomArray = lomObj.toArray();

现在我们有了数组,我们可以创建一个新对象

QJsonObj newObject;
newObject["LOM ID"] = 3;
newObject["Source"] = "Open Internet"
newObject["Content"] = "Some other content"
//etc...

并将其添加到数组

lomArray.push_back(newObject);

最后,您可以创建一个新文档并获取要写入文件的数据的字节数组

QJsonDocument newDoc(obj);
QByteArray finalData = newDoc.toJson();

答案 1 :(得分:0)

我终于完成了它。 实际上,错误是在声明QJsonObject和QjsonArray时,我将它们声明为指针类型,这就是为什么它不允许将qjs​​onobject插入qjsonarray。 就写入已存在的json文件而言,首先要打开文件并在qjsonarray或object中读取内容。接下来要完成的更改将附加到读取数据(在qjson对象或qjsonarray中)和最后,通过删除前一个文件,将新值插入到读取文档中。 谢谢@ merlin069和这篇文章 - Qt modifying a JSON file