Qt5 записи измененные данные Json

Предупреждение: Данная статья является блоггером оригинал статьи, не могут быть воспроизведены без блоггеров допускается. https://blog.csdn.net/a844651990/article/details/90489487

предисловие

  Qt поддержка JSON обеспечивает простой в использовании C ++ API для синтаксического анализа, изменять и сохранять данные в формате JSON. Он также поддерживает, чтобы сохранить данные в двоичном формате, который является прямым «ММАПОМ», и доступ очень быстро.

Считывание данных в формате JSON

Json файл, 1.json

{
	"name": "flywm",
    "age": "18",
    "home": "tianjin" 
}

Порядок действий:

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("D:/1.json");
    if(!file.open(QIODevice::ReadOnly)) {
        qDebug() << "File open failed!";
    } else {
        qDebug() <<"File open successfully!";
    }

    QJsonDocument jdc(QJsonDocument::fromJson(file.readAll()));
    QJsonObject obj = jdc.object();
    qDebug() << obj.value("name").toString()
             << obj.value("age").toString()
             << obj.value("home").toString();
}

Запись данных в формате JSON

И содержимое файла, как описано выше.

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("D:/1.json");
    if(!file.open(QIODevice::WriteOnly)) {
        qDebug() << "File open failed!";
    } else {
        qDebug() <<"File open successfully!";
    }

    QJsonObject obj;
    obj["age"] = "18";
    obj["name"] = "flywm";
    obj.insert("home", "tianjin");
    QJsonDocument jdoc(obj);
    file.write(jdoc.toJson());
    file.flush();
}

Используйте QJsonArray:

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("D:/1.json");
    if(!file.open(QIODevice::WriteOnly)) {
        qDebug() << "File open failed!";
    } else {
        qDebug() <<"File open successfully!";
    }

    QJsonObject rootObj;

    QJsonObject obj;
    obj["age"] = "18";
    obj["name"] = "flywm";
    obj.insert("home", "tianjin");

    QJsonObject obj1;
    obj1["age"] = "19";
    obj1["name"] = "flywm";
    obj1.insert("home", "tianjin");

    QJsonArray classArray;
    classArray.append(obj);
    classArray.append(obj1);

    rootObj["class"] = classArray;

    QJsonDocument jdoc(rootObj);
    file.write(jdoc.toJson());
    file.flush();
}

JSON:

{
    "class": [
        {
            "age": "18",
            "home": "tianjin",
            "name": "flywm"
        },
        {
            "age": "19",
            "home": "tianjin",
            "name": "flywm"
        }
    ]
}

Изменить данные JSon

Может потребоваться изменить после того, как мы иногда JSON считывать данные, а затем переписать его здесь , в самом деле, ключевым моментом является file.seek (0) , написанный с нуля, или модифицировать будет продолжать записывать что приводит к дублированию. Этот случай подходит JSON изменить существующие данные. Если вам нужно добавить или reduce'd лучше пустые файлы переписать его.

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("D:/1.json");
    if(!file.open(QIODevice::ReadWrite)) {
        qDebug() << "File open failed!";
    } else {
        qDebug() <<"File open successfully!";
    }

    QJsonDocument jdc(QJsonDocument::fromJson(file.readAll()));
    QJsonObject obj = jdc.object();
    // 修改 age
    obj["age"] = "99";
    jdc.setObject(obj);
    file.seek(0);
    file.write(jdc.toJson());
    file.flush();
}

рекомендация

отblog.csdn.net/a844651990/article/details/90489487