美文网首页
使用Qt读写JSON文件(一)——简单的写入文件

使用Qt读写JSON文件(一)——简单的写入文件

作者: 若梦儿 | 来源:发表于2018-12-18 20:07 被阅读103次

简介

介绍使用Qt读写JSON文件。如果你对JSON不是很了解,请阅读我之前的一篇文章json简介
使用的开发环境为:

Qt 5.12.0+Deepin 15.8

在Qt中与JSON相关的类有以下几个,Q=QJsonDocument,QJsonArray,QJsonObject,QJsonParseError,QJsonValue。

json

其中QJsonDocument类提供了读写JSON文档的方式,我们可以通过该类的方法QJsonDocument::fromJson()将一个JSON文档转换成QJsonDocument类,或者通过QJsonDocument::toJson()和QJsonDocument::toBinaryData()函数将一个QJsonDocument类转换为QByteArray,这样我们就可以很轻松地将其写入文件。

QJsonArray封装了JSON中的数组。
QJsonObject封装了JSON中的对象。
QJsonValue封装了JSON中的值。
QJsonParseError 用于报告JSON解析中的错误类型。

使用QJsonObject简单演示

首先,我们使用Qt creator创建一个Qt Console Application项目,项目名称位置可随意。

creator

修改main.cpp中的代码如下所示

#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonValue>
#include <QString>
#include <QDebug>
#include <QFile>
#include <QDateTime>
#include <QDir>

int main(int argc, char *argv[]) {
// 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
    QFile file(QDir::homePath() + "/1.json");
    if(!file.open(QIODevice::ReadWrite)) {
        qDebug() << "File open error";
    } else {
        qDebug() <<"File open!";
    }
// 使用QJsonObject对象插入键值对。
    QJsonObject jsonObject;
    jsonObject.insert("name", "tom");
    jsonObject.insert("age", "18");
    jsonObject.insert("time", QDateTime::currentDateTime().toString());

// 使用QJsonDocument设置该json对象
    QJsonDocument jsonDoc;
    jsonDoc.setObject(jsonObject);

// 将json以文本形式写入文件并关闭文件。
    file.write(jsonDoc.toJson());
    file.close();

    qDebug() << "Write to file";
    return 0;
}

之后打开你的终端(linux环境下), 会看到我们的程序在主目录下生成了一个1.json的文件。然后查看下里面的内容。

json file

不知道你有没有注意到,我们在jsonObject中插入键值对的顺序和文件中的键值对顺序不太一样,这是因为JSON中的object本身是指无序的键值对,它不能确保我们插入的顺序和实际保存的数据顺序一致。如果你的数据需要顺序一致,考虑JSON中的array,array是值的有序列表。

code

简单使用QJsonArray

修改main.cpp中的代码如下,注:该代码会清空主目录先1.json的原有内容,如果你想保留原有的文件内容,请备份或者修改写入的文件名。

#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonValue>
#include <QString>
#include <QDebug>
#include <QFile>
#include <QDateTime>
#include <QDir>

int main(int argc, char *argv[]) {
    // 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
    QFile file(QDir::homePath() + "/1.json");
    if(!file.open(QIODevice::ReadWrite)) {
        qDebug() << "File open error";
    } else {
        qDebug() <<"File open!";
    }

    // 清空文件中的原有内容
    file.resize(0);

    // 使用QJsonArray添加值,并写入文件
    QJsonArray jsonArray;
    jsonArray.append("name");
    jsonArray.append(18);
    jsonArray.append(QDateTime::currentDateTime().toString());

    QJsonDocument jsonDoc;
    jsonDoc.setArray(jsonArray);

    file.write(jsonDoc.toJson());
    file.close();

    qDebug() << "Write to file";
    return 0;
}

这次文件中的数据顺序,和我们扩展JSON数组中的顺序是一致的。


jsonArray

稍微复杂的例子

我们注意到JSON中的值可以是字符串、数组、对象、数字等,因此我们试试结合使用一下。

#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonValue>
#include <QString>
#include <QDebug>
#include <QFile>
#include <QDateTime>
#include <QDir>
#include <QThread>

int main(int argc, char *argv[]) {
    // 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
    QFile file(QDir::homePath() + "/1.json");
    if(!file.open(QIODevice::ReadWrite)) {
        qDebug() << "File open error";
    } else {
        qDebug() <<"File open!";
    }

    // 清空文件中的原有内容
    file.resize(0);

    // 使用QJsonArray添加值,并写入文件
    QJsonArray jsonArray;

    for(int i = 0; i < 3; i++) {
        QJsonObject jsonObject;
        jsonObject.insert("name", QString::number(i+1));
        jsonObject.insert("age", i+18);
        jsonObject.insert("time", QDateTime::currentDateTime().toString());
        jsonArray.append(jsonObject);
        QThread::sleep(2);
    }

    QJsonObject jsonObject;
    jsonObject.insert("number", jsonArray.size());
    jsonArray.append(jsonObject);

    QJsonDocument jsonDoc;
    jsonDoc.setArray(jsonArray);

    file.write(jsonDoc.toJson());
    file.close();

    qDebug() << "Write to file";
    return 0;
}

结果如下所示


3

相关文章

  • 使用Qt读写JSON文件(一)——简单的写入文件

    简介 介绍使用Qt读写JSON文件。如果你对JSON不是很了解,请阅读我之前的一篇文章json简介。使用的开发环境...

  • nodeJS读取json文件并写入txt或redis中

    【1:读取json写入txt文件】json文件book.json js文件 【2:读取json写入redis文件/...

  • python语法案例必知必会#01

    文件的读写 python中简单的文件读写案例 也可以通过 来写入新的文件 python pow函数 在python...

  • python读写文件

    文件读写 写入测试文件: 读文件 使用 open 函数或者 file 函数来读文件,使用文件名的字符串作为输入参数...

  • 第二章 Pandsa基础

    本章主要学习的pandas的相关基础,如下图 文件读写 读取文件 使用一段代码来进行演示 文件写入 一般在数据写入...

  • config.ini

    使用configparser读写config.ini文件 读取config.ini文件 写入config.ini文...

  • 使用Qt读写JSON(二)——从文件解析JSON

    之前介绍了简单的示例,这次我们进行JSON文件的解析。在你的桌面新建文件命名为test.json,内容填写如下: ...

  • fs文件系统操作

    基础写入文件 简单写入文件 流式文件写入 简单文件读取 流式文件读取 流式文件拷贝(读取 + 写入) 复制文件 f...

  • viper配置文件读取

    viper配置文件读取简单使用 使用json文件:config/user.json{ "name":"xj"...

  • 2018-07-08

    这周我们学习了! 文件的读写 使用write()可以完成向文件写入数据 读数据(read) 读单个长度使用read...

网友评论

      本文标题:使用Qt读写JSON文件(一)——简单的写入文件

      本文链接:https://www.haomeiwen.com/subject/yftrkqtx.html