Qt Json 读写操作示例

Qt Json 读写操作示例

类组成:

符号
QJsonArray 封装JSON数组
QJsonDocument 读取和写入JSON文档的方法
QJsonObject 封装JSON对象
QJsonObject::const_iterator QJsonObject::const_iterator类为QJsonObject提供了一个stl风格的常量迭代器
QJsonObject::iterator QJsonObject::iterator类为QJsonObject提供了一个stl风格的非常量迭代器
QJsonParseError 用于报告JSON解析过程中的错误
QJsonValue 封装JSON值

头文件

#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonValue>

示例

{
  "data": [
    {
      "square": [
        {
          "height": 0,
          "success": false
        },
        {
          "height": 3.15,
          "success": false
        },
        {
          "height": 33,
          "success": true
        }
      ],
      "color": "Blue"
    },
    {
      "square": [
        {
          "height": 0,
          "success": false
        },
        {
          "height": 5.5,
          "success": false
        },
        {
          "height": 55,
          "success": true
        }
      ],
      "color": "Green"
    }
  ],
  "time": "周四 12月 17 11:11:11 2011"
}

写入

QDateTime time = QDateTime::currentDateTime();

QFile file("test.json");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
    return ;

QJsonArray dataArray;
for (auto iter = data.square.begin(); iter != data.square.end(); ++iter) {
    
    QJsonArray squareArray;

    for (auto it =  iter.value().begin(); it != iter.value().end(); ++it)
    {
        QJsonObject object;
        object.insert("height", it.value().height);
        object.insert("success", it.value().success);

        squareArray.append(object);
    }

    QJsonObject dataObject;
    dataObject.insert("color", iter.key());
    dataObject.insert("square", squareArray);
    dataArray.append(dataObject);
}

QJsonObject jsonObject;
jsonObject.insert("time", time.toString());
jsonObject.insert("data", dataArray);

QJsonDocument jsonDoc;
jsonDoc.setObject(jsonObject);
file.write(jsonDoc.toJson());
file.close();

读取解析

QByteArray byte;
QFile file("test.json");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    return ;
byte = file.readAll();

QJsonParseError json_error;
QJsonDocument jsonDoc(QJsonDocument::fromJson(byte, &json_error));
if (json_error.error != QJsonParseError::NoError)
{
    return;
}
QJsonObject rootobj = jsonDoc.object();
QDateTime = QDateTime::fromString(rootobj["time"].toString(), "yyyyMMddhhmmss");

/* data键解析 */
QJsonValue data_Value = rootobj.value("data");
if (data_Value.isArray())
{
    for (int idx = 0; idx <= data_Value.toArray().size(); idx++)
    {
        QJsonValue data_Obj = data_Value.toArray().at(idx);
        QString color = data_Obj["color"].toString();
        QJsonValue square_Obj = data_Obj["square"];
        if (square_Obj.isArray())
        {
            for (int idy = 0; idy <= square_Obj.toArray().size(); idy++)
            {
                int height = square_Obj.toArray().at(idy)["height"].toDouble();
                int success = square_Obj.toArray().at(idy)["success"].toInt();
            }
        }
    }
}

转载请注明出处。以上只代表个人观点,引用不当或侵权请联系删除。

posted @ 2023-05-09 11:31  yg1990  阅读(46)  评论(0编辑  收藏  举报