一、qjsondocument简介
qjsondocument是Qt中提供的用于JSON文档的读写和操作的类。它是通过解析JSON数据,将其转化为一个QVariant类型的值,并通过相关的函数提取和操作JSON数据的类。
qjsondocument所支持的JSON类型如下:
- 对象(Object)
- 数组(Array)
- 字符串(String)
- 整数(Integer)
- 浮点数(Double)
- 布尔值(Boolean)
- 空(Null)
下面是一个简单的JSON文档示例:
{ "name": "Lily", "age": 18, "score": { "chinese": 90, "math": 95, "english": 98 }, "married": false, "hobbies": ["reading", "traveling", "swimming"] }
使用qjsondocument读取该JSON文档:
QJsonDocument doc = QJsonDocument::fromJson(jsonText.toUtf8()); QJsonObject obj = doc.object(); QString name = obj.value("name").toString(); int age = obj.value("age").toInt(); QJsonObject score = obj.value("score").toObject(); int chineseScore = score.value("chinese").toDouble(); int mathScore = score.value("math").toDouble(); int englishScore = score.value("english").toDouble(); bool married = obj.value("married").toBool(); QJsonArray hobbies = obj.value("hobbies").toArray(); QStringList hobbyList; for(auto hobby : hobbies){ hobbyList.append(hobby.toString()); }
以上代码即可读取JSON文档中的数据,并保存到对应的变量中。
二、qjsondocument的操作
1、创建JSON文档
我们可以通过QJsonObject、QJsonArray、QJsonValue这三个类,分别来创建一个包含不同JSON类型数据的JSON文档。
下面是一个使用QJsonObject、QJsonArray、QJsonValue创建JSON文档的例子:
QJsonObject person; person.insert("name", "John"); person.insert("age", 32); QStringList fruits = {"apple", "banana", "orange"}; QJsonArray fruitArray; for(auto fruit : fruits){ fruitArray.append(fruit); } person.insert("fruits", fruitArray); QJsonDocument doc(person);
通过以上代码,我们创建了一个JSON文档,它包含了名为“name”和“age”的两个键值对,以及一个名为“fruits”的键值对,它的值是一个QJsonArray类型,包含了3个字符串元素。
2、读取JSON数据
我们可以使用QJsonObject、QJsonArray、QJsonValue这三个类,来快速读取JSON文档中的对应数据。
下面是一个使用QJsonObject、QJsonArray、QJsonValue读取JSON文档数据的例子:
QJsonDocument doc = QJsonDocument::fromJson(jsonText.toUtf8()); QJsonObject obj = doc.object(); QString name = obj.value("name").toString(); int age = obj.value("age").toInt(); QJsonObject score = obj.value("score").toObject(); int chineseScore = score.value("chinese").toDouble(); int mathScore = score.value("math").toDouble(); int englishScore = score.value("english").toDouble(); bool married = obj.value("married").toBool(); QJsonArray hobbies = obj.value("hobbies").toArray(); QStringList hobbyList; for(auto hobby : hobbies){ hobbyList.append(hobby.toString()); }
通过以上代码,我们可以快速读取JSON文档中指定键值对的值,以及从JSON数组中读取元素。
3、写入JSON数据
我们可以通过QJsonObject、QJsonArray、QJsonValue这三个类,来快速写入JSON数据。
下面是一个使用QJsonObject、QJsonArray、QJsonValue写入JSON数据的例子:
QJsonObject person; person.insert("name", "John"); person.insert("age", 32); QStringList fruits = {"apple", "banana", "orange"}; QJsonArray fruitArray; for(auto fruit : fruits){ fruitArray.append(fruit); } person.insert("fruits", fruitArray); QJsonDocument doc(person);
通过以上代码,我们可以快速写入JSON文档中指定键值对的值,以及将数据写入到JSON数组中。
三、qjsondocument的使用
下面是一个完整的JSON文档读取、处理和写入的例子:
#include#include #include #include #include int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //读取JSON文档 QString jsonText = "{\"name\": \"Lily\", \"age\": 18, \"score\": {\"chinese\": 90, \"math\": 95, \"english\": 98}, \"married\": false, \"hobbies\": [\"reading\", \"traveling\", \"swimming\"]}"; QJsonDocument doc = QJsonDocument::fromJson(jsonText.toUtf8()); QJsonObject obj = doc.object(); //处理JSON数据 QString name = obj.value("name").toString(); int age = obj.value("age").toInt(); QJsonObject score = obj.value("score").toObject(); int chineseScore = score.value("chinese").toDouble(); int mathScore = score.value("math").toDouble(); int englishScore = score.value("english").toDouble(); bool married = obj.value("married").toBool(); QJsonArray hobbies = obj.value("hobbies").toArray(); QStringList hobbyList; for(auto hobby : hobbies){ hobbyList.append(hobby.toString()); } //写入JSON数据 QJsonObject newScore; newScore.insert("chinese", chineseScore + 5); newScore.insert("math", mathScore + 10); newScore.insert("english", englishScore + 8); obj.insert("score", newScore); QJsonArray newHobbies; newHobbies.append("painting"); newHobbies.append("dancing"); obj.insert("hobbies", newHobbies); QJsonDocument newDoc(obj); qDebug() << newDoc.toJson(QJsonDocument::Compact); return a.exec(); }
使用以上代码,我们可以完整地读取JSON文档中的数据,对其进行相关操作,并最终将数据写入到JSON文档中。在调式窗口中,我们可以看到更新后的JSON文档内容。
四、QJsonDocument的注意事项
使用QJsonDocument时需要注意以下几点:
- 在读取JSON文档时,一定要保证JSON数据格式正确,否则会引起读取失败。
- QJsonDocument在存储JSON数据时,并不保证JSON数据的格式和顺序。因此,对于需要保证JSON数据格式和顺序的场合,需要自行编写相关代码。
- qjsondocument在读取JSON数据时,会自动将数字型、逻辑型等数据类型转化为QVariant类型。因此,在进行数据读取时,需要根据具体数据类型进行相应的类型转换,以便进行相关操作。
五、总结
本文主要介绍了qjsondocument的基本用法。我们可以通过qjsondocument很方便地将JSON数据序列化和反序列化,并对其进行相关操作。在使用qjsondocument时,需要注意JSON数据格式的正确性,同时在读取数据时要进行类型转换,以便进行相关操作。