QT JSON解析

解析 UI,Common, clientViewMargin,left

GetValue(“UI”,“Common”, “clientViewMargin”,“left”,“\0”);

{
  "UI": {
    "Common": {
      "commonFontSize": 24,
      "listTextFontSize": 30,
      "listItemHeight": 80,
      "buttonFontSize": 24,
      "clientViewMargin": {
        "left": 20,
        "right": 20,
        "top": 0,
        "bottom": 0
      }
    }
  }
}
#pragma once

#include <QFile>
#include <QString>
#include <QVariant>
#include <QDateTime>
#include <QJsonObject>


class AppConfig
{
public:
	AppConfig();
	virtual ~AppConfig();

	bool LoadConfig(const QString& path);

public:
	QVariant GetValue(const char* format, ...); //("UI","title_panel", "height", "\0");最后必须加一个结束符

	int32_t GetIntValue(const char* format, ...);
	uint32_t GetUintValue(const char* format, ...);
	double GetFloatValue(const char* format, ...);
	QString GetStringValue(const char* format, ...);
	QByteArray GetByteArrayValue(const char* format, ...);
	QDateTime GetDateTimeValue(const char* format, ...);

private:
	QVariant GetValueByKeys(QJsonValue jv, QList<QString> keys);

private:
	QString mFilePath;
	QJsonObject mJsonObj;
};

#include <QDebug>
#include <QJsonArray>
#include <QJsonDocument>
#include <QCoreApplication>
#include "AppConfig.h"


AppConfig::AppConfig()
{
}

AppConfig::~AppConfig()
{
}

bool AppConfig::LoadConfig(const QString& path)
{
	if (path.isEmpty())
	{
		qDebug() << "error:open failed" << mFilePath;
		return false;
	}

	mFilePath = path;

	QFile file(mFilePath);
	if (!file.open(QFile::ReadOnly))
	{
		FXC << "error:open failed" << mFilePath;
		return false;
	}

	QByteArray ba = file.readAll();

	file.close();

	QJsonParseError error;
	QJsonDocument doc = QJsonDocument::fromJson(ba, &error);
	if (doc.isNull() || (error.error != QJsonParseError::NoError))
	{
		return false;
	}

	doc.toJson(QJsonDocument::Compact);
	mJsonObj = doc.object();

	return true;
}

QVariant AppConfig::GetValue(const char* format, ...)
{
	const char* para = NULL;
	va_list args;
	QList<QString> keys;

	keys.push_back(format);

	va_start(args, format);
	do
	{
		para = va_arg(args, char*);
		if (*para == '\0')
		{
			break;
		}
		keys.push_back(para);
	} while (true);
	va_end(args);

	QJsonValue jv = mJsonObj;

	return GetValueByKeys(jv, keys);
}

int32_t AppConfig::GetIntValue(const char* format, ...)
{
	const char* para = NULL;
	va_list args;
	QList<QString> keys;

	keys.push_back(format);

	va_start(args, format);
	do
	{
		para = va_arg(args, char*);
		if (*para == '\0')
		{
			break;
		}
		keys.push_back(para);
	} while (true);
	va_end(args);

	QJsonValue jv = mJsonObj;

	return GetValueByKeys(jv, keys).toInt();
}

uint32_t AppConfig::GetUintValue(const char* format, ...)
{
	const char* para = NULL;
	va_list args;
	QList<QString> keys;

	keys.push_back(format);

	va_start(args, format);
	do
	{
		para = va_arg(args, char*);
		if (*para == '\0')
		{
			break;
		}
		keys.push_back(para);
	} while (true);
	va_end(args);

	QJsonValue jv = mJsonObj;

	return GetValueByKeys(jv, keys).toUInt();
}

double AppConfig::GetFloatValue(const char* format, ...)
{
	const char* para = NULL;
	va_list args;
	QList<QString> keys;

	keys.push_back(format);

	va_start(args, format);
	do
	{
		para = va_arg(args, char*);
		if (*para == '\0')
		{
			break;
		}
		keys.push_back(para);
	} while (true);
	va_end(args);

	QJsonValue jv = mJsonObj;

	return GetValueByKeys(jv, keys).toDouble();
}

QString AppConfig::GetStringValue(const char* format, ...)
{
	const char* para = NULL;
	va_list args;
	QList<QString> keys;

	keys.push_back(format);

	va_start(args, format);
	do
	{
		para = va_arg(args, char*);
		if (*para == '\0')
		{
			break;
		}
		keys.push_back(para);
	} while (true);
	va_end(args);

	QJsonValue jv = mJsonObj;

	return GetValueByKeys(jv, keys).toString();
}

QByteArray AppConfig::GetByteArrayValue(const char* format, ...)
{
	const char* para = NULL;
	va_list args;
	QList<QString> keys;

	keys.push_back(format);

	va_start(args, format);
	do
	{
		para = va_arg(args, char*);
		if (*para == '\0')
		{
			break;
		}
		keys.push_back(para);
	} while (true);
	va_end(args);

	QJsonValue jv = mJsonObj;

	QVariant value = GetValueByKeys(jv, keys);
	QJsonValue jvalue = value.toJsonValue();
	if (!jvalue.isArray())
	{
		return QByteArray();
	}

	QByteArray ba;
	QJsonArray jarr = jvalue.toArray();
	for (int32_t i = 0; i < jarr.size(); i++)
	{
		ba.push_back((char)jarr[i].toInt());
	}

	return ba;
}

QDateTime AppConfig::GetDateTimeValue(const char* format, ...)
{
	const char* para = NULL;
	va_list args;
	QList<QString> keys;

	keys.push_back(format);

	va_start(args, format);
	do
	{
		para = va_arg(args, char*);
		if (*para == '\0')
		{
			break;
		}
		keys.push_back(para);
	} while (true);
	va_end(args);

	QJsonValue jv = mJsonObj;

	return GetValueByKeys(jv, keys).toDateTime();
}

QVariant AppConfig::GetValueByKeys(QJsonValue jv, QList<QString> keys)
{
	int32_t keyNum = keys.count();
	for (int32_t i = 0; i < keyNum; ++i)
	{
		QString key = keys[i];
		if (!jv.isObject() || !jv.toObject().contains(key))
		{
			break;
		}

		if (i == (keyNum - 1))
		{
			return jv.toObject().value(key);
		}

		jv = jv.toObject().value(key);
	}

	return QVariant();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值