头文件
#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;
}