前言
QT5开始新增加几个相关类,专门用于处理JSON:
- QJsonDocument:provides a way to read and write JSON documents,用于读写json格式的文档
- QJsonArray:encapsulates a JSON array,封装json数组
- QJsonObject:encapsulates a JSON object,封装json对象
- QJsonValue:encapsulates a value in JSON,封装json的值
- QJsonParseError:used to report errors during JSON parsing,报告json解析过程中出现的异常
使用方式
- 直接使用QJsonObject封装或解析json对象,直接使用QJsonArray封装或解析json数组
- 使用QVariantMap封装或解析json对象,使用QVariantList封装或解析json数组
具体代码
json对象的封装与解析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 使用QJsonObject
QJsonObject json;
json.insert("number", 1);
json.insert("type", "QJsonObject");
QJsonDocument document;
document.setObject(json);
QByteArray m_byteArray = document.toJson(QJsonDocument::Compact);
QJsonParseError m_jsonError;
QJsonDocument m_jsonDocument = QJsonDocument::fromJson(m_byteArray, &m_jsonError);
// 使用QVariantMap
QVariantMap m_map;
m_map.insert("number", 1");
m_map.insert("type", "QJsonObject");
QJsonDocument m_jsonDocument = QJsonDocument::fromVariant(m_map);json数组的封装与解析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// 使用QJsonArray
QJsonArray m_jsonArray;
for(int i = 0; i < 3; i++) {
QJsonObject jsonObject;
jsonObject.insert("number", QString::number(i+1));
jsonObject.insert("type", "QJsonObject");
m_jsonArray.append(jsonObject);
}
QJsonDocument m_jsonDoc;
m_jsonDoc.setArray(m_jsonArray);
QByteArray m_byteArray = m_jsonDoc.toJson(QJsonDocument::Compact);
QJsonParseError m_jsonError;
QJsonDocument m_jsonDocument = QJsonDocument::fromJson(m_byteArray, &m_jsonError);
// 使用QVariantList
QVariantList m_list;
for(int i = 0; i < 3; i++) {
QVariantMap m_map;
m_map.insert("number", 1);
m_map.insert("type", "QJsonObject");
m_list.append(m_map);
}
QJsonDocument m_jsonDocument = QJsonDocument::fromVariant(m_list);
其他注意事项
- QJsonDocument::Compact(紧凑型),这是转换后得到的字符串格式,另外还有QJsonDocument::Indented
- 解析后,使用前最好通过QJsonDocument::isNull()方法来判断当前document是否可用
Comments