头文件

  1. #ifndef PARSEJSON_H
  2. #define PARSEJSON_H
  3. #include <QtWidgets>
  4. /**
  5. * @brief 该类主要是为了解析json使用
  6. * parseIsJson 判断这个QByteArray是不是json结构,同时可以判断code是否等于零。
  7. * 判断结果存储在jsonParseStatus里, 通过getJsonParseStatus()取值
  8. *
  9. * parseJsonByValue判断指定key是否存在, 且同时判断是否是指定的类型。
  10. * 判断结果存储在 iskeyExist变量中,通过hasKey()取值。
  11. *
  12. * 例如:
  13. * QJsonValue msgValue = parseJsonByValue(jsonObject, "msg", "string");
  14. * QString msg = isKeyExist ? msgValue.toString() : QString();
  15. */
  16. class ParseJson {
  17. public:
  18. ParseJson();
  19. QJsonObject parseIsJson(QByteArray response, bool isParseCode = false);
  20. bool getJsonParseStatus();
  21. QJsonValue parseJsonByValue(QJsonObject jsonObject, QString key, QString valueType);
  22. bool hasKey();
  23. QString getErrorMsg(QJsonObject jsonObject);
  24. private:
  25. bool jsonParseStatus;
  26. bool isKeyExist;
  27. };
  28. #endif // PARSEJSON_H

实现

  1. #include "parsejson.h"
  2. /**
  3. * @date 2021-01-29
  4. * @param response 服务器返回的字符串
  5. * @param isParseCode 是否解析出code并判断其值是否为0
  6. * @return
  7. */
  8. QJsonObject ParseJson::parseIsJson(QByteArray response, bool isParseCode)
  9. {
  10. QJsonObject jsonObject = QJsonObject();
  11. if (response.isEmpty()) {
  12. jsonParseStatus = false;
  13. return jsonObject;
  14. }
  15. QJsonParseError jsonError;
  16. QJsonDocument document = QJsonDocument::fromJson(response, &jsonError);
  17. if (document.isNull() || jsonError.error != QJsonParseError::NoError) {
  18. jsonParseStatus = false;
  19. } else {
  20. jsonObject = document.object();
  21. if (isParseCode) {
  22. QJsonValue code = parseJsonByValue(jsonObject, "code", "int");
  23. if ((!isKeyExist) && (code != 0)) {
  24. jsonParseStatus = false;
  25. }
  26. }
  27. }
  28. return jsonObject;
  29. }
  30. /**
  31. * @brief 根据key解析json获取对应的值,如果key不存在返回空QJsonValue
  32. * valueType是判断是否是给定类型, valueType判断内容见代码 if语句
  33. */
  34. QJsonValue ParseJson::parseJsonByValue(QJsonObject jsonObject, QString key, QString valueType)
  35. {
  36. QJsonValue object = QJsonValue();
  37. if (jsonObject.contains(key)) {
  38. object = jsonObject.value(key);
  39. if (valueType == "") {
  40. isKeyExist = true;
  41. } else if (valueType == "array") {
  42. isKeyExist = object.isArray();
  43. } else if (valueType == "object") {
  44. isKeyExist = object.isObject();
  45. } else if (valueType == "string") {
  46. isKeyExist = object.isString();
  47. } else if (valueType == "bool") {
  48. isKeyExist = object.isBool();
  49. } else if (valueType == "int") { // 测试 int型 通过 isDouble判断
  50. isKeyExist = object.isDouble();
  51. } else if (valueType == "null") {
  52. isKeyExist = object.isNull();
  53. } else if (valueType == "undefined") {
  54. isKeyExist = object.isUndefined();
  55. } else {
  56. isKeyExist = false;
  57. }
  58. } else {
  59. isKeyExist = false;
  60. }
  61. return object;
  62. }
  63. /**
  64. * @brief 获取错误信息
  65. */
  66. QString ParseJson::getErrorMsg(QJsonObject jsonObject)
  67. {
  68. QJsonValue msgValue = parseJsonByValue(jsonObject, "msg", "string");
  69. QString msg = isKeyExist ? msgValue.toString() : QString();
  70. return msg;
  71. }
  72. ParseJson::ParseJson()
  73. {
  74. }
  75. bool ParseJson::getJsonParseStatus()
  76. {
  77. return jsonParseStatus;
  78. }
  79. bool ParseJson::hasKey()
  80. {
  81. return isKeyExist;
  82. }