Qt读写json文件

143 篇文章 23 订阅

举例如下:

#include <QFile>
#include <QObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonParseError>

QString readJsonStr(const QString &pathname)
{
    //打开json文件
    QFile file(pathname);
    if (!file.open(QFile::ReadOnly | QFile::Text))
    {
        return "";
    }

    //读取json文件的全部内容
    QTextStream stream(&file);
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
    stream.setEncoding(QStringConverter::Utf8);
#else
    stream.setCodec("UTF-8"); //设置写入编码是UTF8
#endif
    QString str = stream.readAll();
    file.close();

    //得到内容
    return str;
}

bool getJsonObj(const QString &json) //输入的json字符串是从共享内存读出来的
{
    QJsonDocument doc;
    QJsonParseError error;

    doc = QJsonDocument::fromJson(json.toLatin1(), &error);
    if (doc.isNull() || !doc.isObject() || error.error != QJsonParseError::NoError)
    {
        qDebug() << "GetImagehead error:" << error.errorString();
        return false;
    }

    QJsonObject obj = doc.object();
    QStringList keys = obj.keys();
    foreach (const QString &key, keys)
    {
        //处理每个键名
    }

    if (obj.contains("key"))
    {
        //存在该键
    }
    else
    {
        //不存在该键
    }

    double x = obj["x"].toDouble();
    double y = obj["y"].toDouble();
    double d = obj["d"].toDouble();

    struct Pos
    {
        double dx;
        double dy;
    };

    std::vector<Pos> vt;
    QJsonArray j = obj["list"].toArray();
    for (int i = 0; i < j.count(); i++)
    {
        QJsonObject ev = j.at(i).toObject();
        Pos s;
        s.dx = ev["dx"].toDouble();
        s.dy = ev["dy"].toDouble();
        vt.push_back(s);
    }

    bool base = json.contains("\"target\":\"base\"");
    return true;
}

---

从零开始的 JSON 库教程 - 知乎

GitHub - miloyip/json-tutorial: 从零开始的 JSON 库教程

GitHub - Tencent/rapidjson: A fast JSON parser/generator for C++ with both SAX/DOM style API

JSON for Modern C++ 

GitHub - nlohmann/json: JSON for Modern C++ 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值