在 Qt 中处理 JSON 数据时,通常会使用以下头文件:
- **
QJsonDocument
**:用于封装 JSON 文档(可以是 JSON 对象或 JSON 数组)
- **
QJsonObject
**:用于表示 JSON 对象(key-value 形式的 JSON 数据)
- **
QJsonArray
**:用于表示 JSON 数组
- **
QJsonValue
**:用于表示 JSON 对象或数组中的值(可以是字符串、数字、布尔值等)
- **
QJsonParseError
**:用于捕捉 JSON 解析中的错误
序列化和反序列化 JSON 用 QJsonDocument,创建 JSON 用 QJsonObject。
想要在网络中进行传输,需要把 QJsonObject 转换为 QByteArray。
创建JSON
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QJsonValue> #include <QDebug>
void createJson() { QJsonObject jsonObj; jsonObj.insert("name", "John Doe"); jsonObj.insert("age", 30); jsonObj.insert("isStudent", false);
QJsonArray jsonArray; jsonArray.append("Reading"); jsonArray.append("Traveling"); jsonArray.append("Swimming");
jsonObj.insert("hobbies", jsonArray);
QJsonDocument jsonDoc(jsonObj); QByteArray jsonData = jsonDoc.toJson(); qDebug() << "Created JSON:" << jsonData; }
|
解析JSON
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QJsonValue> #include <QDebug>
void parseJson(const QByteArray &jsonData) { QJsonParseError jsonError; QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &jsonError);
if (jsonError.error != QJsonParseError::NoError) { qDebug() << "JSON parse error:" << jsonError.errorString(); return; }
if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); qDebug() << "Parsed JSON object:" << jsonObj;
if (jsonObj.contains("name")) { qDebug() << "Name:" << jsonObj.value("name").toString(); } if (jsonObj.contains("age")) { qDebug() << "Age:" << jsonObj.value("age").toInt(); } } }
|