QT JSON文件解析

参考博客

https://blog.youkuaiyun.com/cpp_learner/article/details/118421096

1 打开文件,读取全部内容

QFile file("../Json/js.json");
if (!file.open(QFile::ReadOnly | QFile::Text)) {
	qDebug() << "can't open error!";
	return;
}

// 读取文件的全部内容
QTextStream stream(&file);
stream.setCodec("UTF-8");		// 设置读取编码是UTF8
QString str = stream.readAll();

file.close();

2 将字符串解析成QJsonDocument对象

// QJsonParseError类用于在JSON解析期间报告错误。
QJsonParseError jsonError;
// 将json解析为UTF-8编码的json文档,并从中创建一个QJsonDocument。
// 如果解析成功,返回QJsonDocument对象,否则返回null
QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);
// 判断是否解析失败
if (jsonError.error != QJsonParseError::NoError && !doc.isNull()) {
	qDebug() << "Json格式错误!" << jsonError.error;
	return;
}

3 获取JSON根{}对象

QJsonObject rootObj = doc.object();
Qt解析JSON文件,可从JSON格式的文本文件解析JSON字符串,还可使用`QJsonParseError`对象捕获解析过程中的错误信息 [^1]。 以下是一个简单的示例代码,展示如何使用Qt解析JSON文件: ```cpp #include <QCoreApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QDebug> void parseJsonFile(const QString& filePath) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Failed to open file:" << filePath; return; } QByteArray jsonData = file.readAll(); file.close(); QJsonParseError parseError; QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &parseError); if (parseError.error != QJsonParseError::NoError) { qDebug() << "JSON parse error:" << parseError.errorString(); return; } if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); // 这里可根据实际的JSON结构进行解析 // 例如,假设JSON文件结构类似引用[2] if (jsonObj.contains("attentions") && jsonObj["attentions"].isArray()) { QJsonArray attentionsArray = jsonObj["attentions"].toArray(); for (const auto& attention : attentionsArray) { if (attention.isObject()) { QJsonObject attentionObj = attention.toObject(); QString metaKey = attentionObj["meta_key"].toString(); if (attentionObj.contains("inference") && attentionObj["inference"].isObject()) { QJsonObject inferenceObj = attentionObj["inference"].toObject(); double mean = inferenceObj["mean"].toDouble(); double max = inferenceObj["max"].toDouble(); qDebug() << "Meta Key:" << metaKey << "Mean:" << mean << "Max:" << max; } } } } // 若JSON文件结构类似引用[3] if (jsonObj.contains("name") && jsonObj.contains("province")) { QString countryName = jsonObj["name"].toString(); qDebug() << "Country Name:" << countryName; QJsonArray provinceArray = jsonObj["province"].toArray(); for (const auto& province : provinceArray) { if (province.isObject()) { QJsonObject provinceObj = province.toObject(); QString provinceName = provinceObj["name"].toString(); qDebug() << "Province Name:" << provinceName; if (provinceObj.contains("cities") && provinceObj["cities"].isObject()) { QJsonObject citiesObj = provinceObj["cities"].toObject(); if (citiesObj.contains("city") && citiesObj["city"].isArray()) { QJsonArray cityArray = citiesObj["city"].toArray(); for (const auto& city : cityArray) { QString cityName = city.toString(); qDebug() << "City Name:" << cityName; } } } } } } } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString filePath = "your_json_file.json"; // 替换为实际的JSON文件路径 parseJsonFile(filePath); return a.exec(); } ``` ### 代码说明: 1. **打开文件**:使用`QFile`打开JSON文件,并读取其内容。 2. **解析JSON数据**:使用`QJsonDocument::fromJson`方法将JSON数据解析为`QJsonDocument`对象,同时使用`QJsonParseError`捕获解析错误。 3. **处理JSON对象和数组**:根据JSON文件的实际结构,使用`QJsonObject`和`QJsonArray`访问和处理其中的数据。 ### 注意事项: - 需根据实际的JSON文件结构调整解析代码。 - 要确保JSON文件路径正确,且程序有读取该文件的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值