Qt读写Json格式配置文件

头文件DConfig.h

 1 #pragma once
 2
 3 #include <QSettings>
 4 #include <QFile>
 5 #include <QJsonDocument>
 6 #include <QJsonObject>
 7 #include <QJsonArray>
 8
 9 class DConfig
10 {
11 public:
12     DConfig(const QString &fileName);
13
14     void write(const QString &key, const QVariant& value);
15     QVariant read(const QString &key, const QString &default = "");
16     bool hasParam(const QString &key);
17     QString readString(const QString &key, const QString &default = "");
18     bool readBool(const QString &key, bool default = false);
19     float readFloat(const QString &key, float default = 0.0f);
20     int readInt(const QString &key, int default = 0);
21
22 private:
23     QJsonObject m_rootObj;
24     QString m_jsonPath;
25 };

源文件DConfig.cpp

#include "DConfig.h"

DConfig::DConfig(const QString &fileName) : m_jsonPath(fileName)
{
    QFile loadFile(m_jsonPath);
    if (!loadFile.open(QIODevice::ReadOnly))
    {
        return;
    }
    QByteArray allData = loadFile.readAll();
    loadFile.close();
    allData.remove(allData.size() - 3, 3);
    allData.remove(0, 6);
    QJsonParseError jsondError;
    QJsonDocument jsonDoc = QJsonDocument::fromJson(allData, &jsondError);
    if (jsondError.error != QJsonParseError::NoError)
    {
        return;
    }
    m_rootObj = jsonDoc.object();
}

void DConfig::write(const QString &key, const QVariant &value)
{
    m_rootObj.insert(key, value.toJsonValue());
    QJsonArray arr;
    arr.push_back(m_rootObj);
    QJsonDocument jsonDoc(arr);
    QByteArray jsonArry = jsonDoc.toJson();
    QFile file(m_jsonPath);
    if (!file.open(QIODevice::WriteOnly))
    {
        return;
    }
    file.write(jsonArry);
    file.close();
}

QVariant DConfig::read(const QString &key, const QString &default)
{
    if (hasParam(key))
    {
        QVariant subObj = m_rootObj.value(key).toVariant();
        return subObj;
    }
    return default;
}

QString DConfig::readString(const QString &key, const QString &default)
{
    if (hasParam(key))
    {
        QString subObj = m_rootObj.value(key).toString();
        return subObj;
    }
    return default;
}

bool DConfig::readBool(const QString &key, bool default)
{
    if (hasParam(key))
    {
        bool subObj = m_rootObj.value(key).toBool();
        return subObj;
    }
    return default;
}

float DConfig::readFloat(const QString &key, float default)
{
    if (hasParam(key))
    {
        float subObj = m_rootObj.value(key).toDouble();
        return subObj;
    }
    return default;
}

int DConfig::readInt(const QString &key, int default)
{
    if (hasParam(key))
    {
        int subObj = m_rootObj.value(key).toInt();
        return subObj;
    }
    return default;
}

bool DConfig::hasParam(const QString &key)
{
    return m_rootObj.contains(key);
}

注意:由于QT保存的Json格式外部有中括号,但读取时有中括号会报错,因此需要删除,以下cpp内的代码是为了删除中括号,首尾各占3个字符

allData.remove(allData.size() - 3, 3);
allData.remove(0, 6);而首部删除6个字符,是防止手动修改json时多出来的3个编码格式字符

原文地址:https://www.cnblogs.com/dengyg0710/p/10836890.html

时间: 2024-08-30 10:22:51

Qt读写Json格式配置文件的相关文章

Python怎么读写json格式文件

JSON-是一个轻量级的数据交换格式.点击打开百度百科 JSON维基百科:http://zh.wikipedia.org/wiki/JSON json模块 关于json的官方文档:点击打开链接 本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创.不定期更新,有错误请指正. Sina微博关注:@The_Third_Wave 如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址. d

Android读写JSON格式的数据之JsonWriter和JsonReader

最近的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西.最近打算找一份Android的工作,要继续拾起以前的东西.公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才开始办公.不说这些了,下面开始今天的正文. JSON格式的数据通常用于网络传输,尤其是在移动设备上与服务端进行数据交互.JSON与XML比较有明显的优势.XML格式的数据非常臃肿,传递少量的数据就要附带很多额外的格式数据.而JSON除了少量的符号外,全部是真正的数据,所以有越来越多的程序用JSON来取代XM

QJsonDocument实现Qt下JSON文档读写

版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QJsonDocument实现Qt下JSON文档读写     本文地址:http://techieliang.com/2017/12/718/ 文章目录 1. 介绍  1.1. 错误分类  1.2. Json内容读写  1.3. 数据类型 2. 读写操作  2.1. json范例 3. 创建 4. 解析 5. 其他 1. 介绍 Qt提供了一系列类以供进行Json 文档的读写,分别为: QJs

Delphi中Json格式读写

Json是一种轻量级数据传输格式,广泛应用互联网和各应用中,json主要采用键值对来表示数据项,多个数据项之间用逗号分隔,也可以用于数组.下面注重介绍一下在delphi中使用json,在delphi中使用json常用superobject单元文件,该文件可以在网上下载,最初接触json是在2011年,好久没用这不刚好有项目要用到又折腾了好久,下面做了一个简单的Demo,方便以后忘了能随时查看,具体的json使用可以参看万一老师的博客,记录的很详细,下面的demo主要是将数据库记录转换为json格

C语言ini格式配置文件的读写

依赖的类 1 /*1 utils.h 2 *# A variety of utility functions. 3 *# 4 *# Some of the functions are duplicates of well known C functions that are not 5 *# standard. 6 *2 License 7 *[ 8 *# Author: Werner Stoop 9 *# This software is provided under the terms of

python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串) json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数

IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值

json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在yourfile.json文件中保存了如下信息: { "user_message":{ "name":"lowman", "age":"14", }, "database":{ "USE

.net core读取json格式的配置文件

在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢? 1.在Startup类中读取json配置文件 1.使用Configuration直接读取 看下面的代码: public IConfiguration Configuration { get; } Configuration属

二进制配置文件为什么比json等配置文件效率高

二进制配置文件为什么比json等配置文件高效 项目中用spine做动画,spine可以导出json和二进制的动画配置文件,蛋疼的是spine官方竟然没有提供c的二进制配置解析代码,更没有提供它二进制文件的格式说明.为了动画加载的更快,只能自己把json用python转成二进制文件(格式自定),再自行实现解析二进制的c代码了.经过小心谨慎的代码实现后,测试结果是二进制配置文件比json文件大小小了1半以上,并且动画创建速度快1倍以上.下文简单总结了一下二进制配置文件的优点. 1.什么是二进制配置文