Qt5 新增加了处理 JSON 的类,与 XML 类库类似,均以 QJson 开头,Qt5 新增加六个相关类:
QJsonArray
|
封装 JSON 数组
|
QJsonDocument
|
读写 JSON 文档
|
QJsonObject
|
封装 JSON 对象
|
QJsonObject::iterator
|
用于遍历QJsonObject的 STL 风格的非 const 遍历器
|
QJsonParseError
|
报告 JSON 处理过程中出现的错误
|
QJsonValue
|
封装 JSON 值
|
使用示例:
-
QString json("{"
-
"\"encoding\" : \"UTF-8\","
-
"\"plug-ins\" : ["
-
"\"python\","
-
"\"c++\","
-
"\"ruby\""
-
"],"
-
"\"indent\" : { \"length\" : 3, \"use_space\" : true }"
-
"}");
-
QJsonParseError error;
-
QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), &error);
-
if (error.error == QJsonParseError::NoError) {
-
if (jsonDocument.isObject()) {
-
QVariantMap result = jsonDocument.toVariant().toMap();
-
qDebug() << "encoding:" << result["encoding"].toString();
-
qDebug() << "plugins:";
-
-
foreach (QVariant plugin, result["plug-ins"].toList()) {
-
qDebug() << "\t-" << plugin.toString();
-
}
-
-
QVariantMap nestedMap = result["indent"].toMap();
-
qDebug() << "length:" << nestedMap["length"].toInt();
-
qDebug() << "use_space:" << nestedMap["use_space"].toBool();
-
}
-
} else {
-
qFatal(error.errorString().toUtf8().constData());
-
exit(1);
-
}
如果需要使用QJsonDocument处理 JSON 文档,我们只需要使用下面的代码模板
-
// 1. 创建 QJsonParseError 对象,用来获取解析结果
-
QJsonParseError error;
-
// 2. 使用静态函数获取 QJsonDocument 对象
-
QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), &error);
-
// 3. 根据解析结果进行处理
-
if (error.error == QJsonParseError::NoError) {
-
if (!(jsonDocument.isNull() || jsonDocument.isEmpty())) {
-
if (jsonDocument.isObject()) {
-
// ...
-
} else if (jsonDocument.isArray()) {
-
// ...
-
}
-
}
-
} else {
-
// 检查错误类型
-
}
将QVariant对象生成 JSON 文档也很简单:
-
QVariantList people;
-
-
QVariantMap bob;
-
bob.insert("Name", "Bob");
-
bob.insert("Phonenumber", 123);
-
-
QVariantMap alice;
-
alice.insert("Name", "Alice");
-
alice.insert("Phonenumber", 321);
-
-
people << bob << alice;
-
-
QJsonDocument jsonDocument = QJsonDocument::fromVariant(people);
-
if (!jsonDocument.isNull()) {
-
qDebug() << jsonDocument.toJson();
-
}
阅读(11680) | 评论(0) | 转发(1) |