QT中关于json的相关操作
阅读数:119 评论数:0
跳转到新版页面分类
Linux
正文
一、概述
在 Qt 中处理 JSON 数据,可以使用 QJsonDocument
、QJsonObject
和 QJsonArray
类。
二、从文件中读取json
假设你有一个 JSON 文件 data.json
,其内容如下:
{
"name": "John Doe",
"age": 30,
"address": {
"city": "New York",
"zip": "10001"
},
"phoneNumbers": [
"123-456-7890",
"987-654-3210"
]
}
以下是从文件读取 JSON 数据的代码:
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonParseError>
#include <QDebug>
void readJsonFromFile(const QString& filePath) {
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Cannot open file for reading:" << file.errorString();
return;
}
QByteArray jsonData = file.readAll();
file.close();
QJsonParseError parseError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &parseError);
if (parseError.error != QJsonParseError::NoError) {
qWarning() << "JSON parse error:" << parseError.errorString();
return;
}
if (!jsonDoc.isObject()) {
qWarning() << "JSON is not an object";
return;
}
QJsonObject jsonObj = jsonDoc.object();
qDebug() << "Name:" << jsonObj["name"].toString();
qDebug() << "Age:" << jsonObj["age"].toInt();
QJsonObject addressObj = jsonObj["address"].toObject();
qDebug() << "City:" << addressObj["city"].toString();
qDebug() << "ZIP:" << addressObj["zip"].toString();
QJsonArray phoneNumbersArray = jsonObj["phoneNumbers"].toArray();
for (const QJsonValue& value : phoneNumbersArray) {
qDebug() << "Phone Number:" << value.toString();
}
}
三、向文件中写入json数据
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
void writeJsonToFile(const QString& filePath) {
QJsonObject jsonObj;
jsonObj["name"] = "John Doe";
jsonObj["age"] = 30;
QJsonObject addressObj;
addressObj["city"] = "New York";
addressObj["zip"] = "10001";
jsonObj["address"] = addressObj;
QJsonArray phoneNumbersArray;
phoneNumbersArray.append("123-456-7890");
phoneNumbersArray.append("987-654-3210");
jsonObj["phoneNumbers"] = phoneNumbersArray;
QJsonDocument jsonDoc(jsonObj);
QFile file(filePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qWarning() << "Cannot open file for writing:" << file.errorString();
return;
}
file.write(jsonDoc.toJson());
file.close();
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString filePath = "data.json";
// 写入 JSON 数据到文件
writeJsonToFile(filePath);
// 从文件读取 JSON 数据
readJsonFromFile(filePath);
return a.exec();
}