我正在使用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"
}
]
}
]
}
感谢。
答案 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时,我将它们声明为指针类型,这就是为什么它不允许将qjsonobject插入qjsonarray。 就写入已存在的json文件而言,首先要打开文件并在qjsonarray或object中读取内容。接下来要完成的更改将附加到读取数据(在qjson对象或qjsonarray中)和最后,通过删除前一个文件,将新值插入到读取文档中。 谢谢@ merlin069和这篇文章 - Qt modifying a JSON file。