QJsonDocument 处理 JSON

http://blog.chinaunix.net/uid-24219701-id-4050632.html


Qt5 新增加了处理 JSON 的类,与 XML 类库类似,均以 QJson 开头,Qt5 新增加六个相关类:

QJsonArray

封装 JSON 数组

QJsonDocument

读写 JSON 文档

QJsonObject

封装 JSON 对象

QJsonObject::iterator

用于遍历QJsonObject的 STL 风格的非 const 遍历器

QJsonParseError

报告 JSON 处理过程中出现的错误

QJsonValue

封装 JSON 

使用示例:

点击(此处)折叠或打开

  1. QString json("{"
  2.         "\"encoding\" : \"UTF-8\","
  3.         "\"plug-ins\" : ["
  4.         "\"python\","
  5.         "\"c++\","
  6.         "\"ruby\""
  7.         "],"
  8.         "\"indent\" : { \"length\" : 3, \"use_space\" : true }"
  9.         "}");
  10. QJsonParseError error;
  11. QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), &error);
  12. if (error.error == QJsonParseError::NoError) {
  13.     if (jsonDocument.isObject()) {
  14.         QVariantMap result = jsonDocument.toVariant().toMap();
  15.         qDebug() << "encoding:" << result["encoding"].toString();
  16.         qDebug() << "plugins:";

  17.         foreach (QVariant plugin, result["plug-ins"].toList()) {
  18.             qDebug() << "\t-" << plugin.toString();
  19.         }

  20.         QVariantMap nestedMap = result["indent"].toMap();
  21.         qDebug() << "length:" << nestedMap["length"].toInt();
  22.         qDebug() << "use_space:" << nestedMap["use_space"].toBool();
  23.     }
  24. } else {
  25.     qFatal(error.errorString().toUtf8().constData());
  26.     exit(1);
  27. }

如果需要使用QJsonDocument处理 JSON 文档,我们只需要使用下面的代码模板

点击(此处)折叠或打开

  1. // 1. 创建 QJsonParseError 对象,用来获取解析结果
  2. QJsonParseError error;
  3. // 2. 使用静态函数获取 QJsonDocument 对象
  4. QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), &error);
  5. // 3. 根据解析结果进行处理
  6. if (error.error == QJsonParseError::NoError) {
  7.     if (!(jsonDocument.isNull() || jsonDocument.isEmpty())) {
  8.         if (jsonDocument.isObject()) {
  9.             // ...
  10.         } else if (jsonDocument.isArray()) {
  11.             // ...
  12.         }
  13.     }
  14. } else {
  15.     // 检查错误类型
  16. }
QVariant 对象生成 JSON 文档也很简单:

点击(此处)折叠或打开

  1. QVariantList people;

  2. QVariantMap bob;
  3. bob.insert("Name", "Bob");
  4. bob.insert("Phonenumber", 123);

  5. QVariantMap alice;
  6. alice.insert("Name", "Alice");
  7. alice.insert("Phonenumber", 321);

  8. people << bob << alice;

  9. QJsonDocument jsonDocument = QJsonDocument::fromVariant(people);
  10. if (!jsonDocument.isNull()) {
  11.     qDebug() << jsonDocument.toJson();
  12. }

你可能感兴趣的:(json,qt)