根据你提供的错误信息,看起来 JSON 字符串在解析时出现了问题。这个问题通常是由于 JSON 格式不正确或包含意外字符造成的。
首先,确保你的 QByteArray
内容确实符合 JSON 格式。你可以使用在线 JSON 验证工具检查字符串的格式是否正确。
检查和修复步骤
去除换行符和多余空格: 有时换行符和空格会导致解析失败。如果你的
QByteArray
中有多余的空白字符,尝试去除它们。简化示例: 尝试直接用简单的字符串进行测试,比如:
QByteArray jsonData = "{\"TeacherName\": \"1\", \"class\": \"1\", \"exam\": \"1\", \"examScore\": \"60\", \"examTime\": \"\"}";
- 完整代码示例: 下面是一个修正后的完整代码示例,注意这里我们把换行符和空格都去掉了:
#include <QCoreApplication>
#include <QByteArray>
#include <QString>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
// 修正后的 QByteArray 字符串(去掉了换行和多余空格)
QByteArray jsonData = "{\"TeacherName\":\"1\",\"class\":\"1\",\"exam\":\"1\",\"examScore\":\"60\",\"examTime:\"\"}";
// 将 QByteArray 转换为 QString
QString jsonString = QString::fromUtf8(jsonData);
// 使用 QJsonDocument 来解析 JSON 字符串
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());
// 检查是否成功解析
if (jsonDoc.isNull()) {
qWarning() << "Failed to create JSON doc.";
return -1;
}
// 确保它是一个对象类型(可以根据需要选择数组等)
if (!jsonDoc.isObject()) {
qWarning() << "JSON is not an object.";
return -1;
}
// 获取 JSON 对象
QJsonObject jsonObj = jsonDoc.object();
// 输出结果以验证内容
qDebug() << "Teacher Name:" << jsonObj["TeacherName"].toString();
qDebug() << "Class:" << jsonObj["class"].toString();
qDebug() << "Exam:" << jsonObj["exam"].toString();
qDebug() << "Exam Score:" << jsonObj["examScore"].toString();
return a.exec();
}
重要提示
- 确保 JSON 字符串格式正确,键名和值都应该被双引号包围。
- 在实际应用中,如果从其他地方获取数据,请确保数据在转成
QByteArray
前已经过处理,不含非法字符或格式问题。 - 如果你仍然遇到问题,可以在这里分享具体的输入数据,我会帮助你进一步排查。
内容由零声教学AI助手提供,问题来源于学员提问