头文件
#ifndef PARSEJSON_H#define PARSEJSON_H#include <QtWidgets>/** * @brief 该类主要是为了解析json使用 * parseIsJson 判断这个QByteArray是不是json结构,同时可以判断code是否等于零。 * 判断结果存储在jsonParseStatus里, 通过getJsonParseStatus()取值 * * parseJsonByValue判断指定key是否存在, 且同时判断是否是指定的类型。 * 判断结果存储在 iskeyExist变量中,通过hasKey()取值。 * * 例如: * QJsonValue msgValue = parseJsonByValue(jsonObject, "msg", "string"); * QString msg = isKeyExist ? msgValue.toString() : QString();*/class ParseJson {public: ParseJson(); QJsonObject parseIsJson(QByteArray response, bool isParseCode = false); bool getJsonParseStatus(); QJsonValue parseJsonByValue(QJsonObject jsonObject, QString key, QString valueType); bool hasKey(); QString getErrorMsg(QJsonObject jsonObject);private: bool jsonParseStatus; bool isKeyExist;};#endif // PARSEJSON_H
实现
#include "parsejson.h"/** * @date 2021-01-29 * @param response 服务器返回的字符串 * @param isParseCode 是否解析出code并判断其值是否为0 * @return*/QJsonObject ParseJson::parseIsJson(QByteArray response, bool isParseCode){ QJsonObject jsonObject = QJsonObject(); if (response.isEmpty()) { jsonParseStatus = false; return jsonObject; } QJsonParseError jsonError; QJsonDocument document = QJsonDocument::fromJson(response, &jsonError); if (document.isNull() || jsonError.error != QJsonParseError::NoError) { jsonParseStatus = false; } else { jsonObject = document.object(); if (isParseCode) { QJsonValue code = parseJsonByValue(jsonObject, "code", "int"); if ((!isKeyExist) && (code != 0)) { jsonParseStatus = false; } } } return jsonObject;}/** * @brief 根据key解析json获取对应的值,如果key不存在返回空QJsonValue * valueType是判断是否是给定类型, valueType判断内容见代码 if语句*/QJsonValue ParseJson::parseJsonByValue(QJsonObject jsonObject, QString key, QString valueType){ QJsonValue object = QJsonValue(); if (jsonObject.contains(key)) { object = jsonObject.value(key); if (valueType == "") { isKeyExist = true; } else if (valueType == "array") { isKeyExist = object.isArray(); } else if (valueType == "object") { isKeyExist = object.isObject(); } else if (valueType == "string") { isKeyExist = object.isString(); } else if (valueType == "bool") { isKeyExist = object.isBool(); } else if (valueType == "int") { // 测试 int型 通过 isDouble判断 isKeyExist = object.isDouble(); } else if (valueType == "null") { isKeyExist = object.isNull(); } else if (valueType == "undefined") { isKeyExist = object.isUndefined(); } else { isKeyExist = false; } } else { isKeyExist = false; } return object;}/** * @brief 获取错误信息*/QString ParseJson::getErrorMsg(QJsonObject jsonObject){ QJsonValue msgValue = parseJsonByValue(jsonObject, "msg", "string"); QString msg = isKeyExist ? msgValue.toString() : QString(); return msg;}ParseJson::ParseJson(){}bool ParseJson::getJsonParseStatus(){ return jsonParseStatus;}bool ParseJson::hasKey(){ return isKeyExist;}