Qt对json的处理

Qt处理json

Qt中操作json用到的头文件

#include <QJsonDocument> #include <QJsonArray> #include<QJSonObject> #include <QByteArray> #include <QJsonValue> #include <QFile>

json 对象 {} --开头 json数组[]–开头

说明:

  • json对象格式的字符串都是以键值对的形式存在的------->key:value,其中key都是以字符串的形式存在的,而value部分可以包含:int, bool char double 等多种类型,value还可以是子对象或者数组
  • 在json文件中,只能是json对象和json数组,不能既有json对象也有json数组
  • 在json对象内部,可以包含子json对象,也可以有子json数组
  • 在json数组内部,可以有子json对象,也可以有子json数组,也可以是double int string
将json格式的字符串写入磁盘文件的代码如下
#include <QCoreApplication>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QByteArray>
#include <QFile>
#include <QDebug>
#include <QVariantList>

void writeJsonToFile(QString fileName){

    // 第一种 =================将json对象写入磁盘文件
    //创建json对象
    QJsonObject json;
    //给json对象插入值
    json.insert("name","xiaowang");
    json.insert("age","123");
    json.insert("sex","female");

    //插入子对象
    QJsonObject subJson;
    subJson.insert("father","laowang");
    subJson.insert("mather","liu");
    subJson.insert("sister","huanhuan");

    json.insert("family",subJson);

    //插入json数组
    QJsonArray jsonArr;
    jsonArr.append(10);
    jsonArr.append("fangfang");
    jsonArr.append(10.7);
    jsonArr.append(true);

    json.insert("temp",jsonArr);

    //第二种::::::::::::::::::::::写json数组到文件
    //构建一个QJsonArray对象
    QJsonArray jsonArr2;

    jsonArr2.append(10);
    jsonArr2.append("xiaowang");
    jsonArr2.append(true);

    //添加子数组
    QJsonArray subArr;
    subArr.append("fangfang");
    subArr.append("wodefang");
    subArr.append(10);

    jsonArr2.append(subArr);

    //添加对象到array;
    jsonArr2.append(json);



    //将QJsonObject转为QJsonDocument  QJsonDocument(const QJsonObject &object)
    QJsonDocument jsonDoc(jsonArr2);

    //将QJsonDocument对象转换为QByteArray对象  QJsonDocument::toJson(QJsonDocument::JsonFormat format) const
    QByteArray byteArr = jsonDoc.toJson(QJsonDocument::Indented);

    //文件操作 -- 将byteArr写入文件
    QFile file(fileName);
    file.open(QIODevice::ReadWrite);
    file.write(byteArr);
    file.close();

    return;
}

void readJsonFromFile(QString fileName)
{
    //构造QFile类对象
    QFile file;

    file.setFileName(fileName);


    file.open(QIODevice::ReadWrite);

    QByteArray testJsonArry = file.readAll();

//  将QByteArray对象转换为QJsonDocument对象
    QJsonDocument jsonDoc = QJsonDocument::fromJson(testJsonArry);

//    jsonDoc.fromJson(testJsonArry);
    file.close();

    if(jsonDoc.isArray())
    {
        QJsonArray jsonArr = jsonDoc.array();
        QVariantList jsonArrList = jsonArr.toVariantList();
        for(int i= 0; i < jsonArrList.size();i++)
        {
          qDebug() << "keys = " << jsonArrList.at(i);
        }

    }else if(jsonDoc.isObject()) {
        QJsonObject jsonObj = jsonDoc.object();
        QStringList keysList = jsonObj.keys();
        for(int i= 0; i < keysList.size();i++)
        {
            QString keys = keysList.at(i);
            QJsonValue jsonValue = jsonObj.value(keys);
            //判断value值得类型
            if(jsonValue.isString())
            {
                qDebug() << keys << ":" << jsonValue.toString();
            }else if(jsonValue.isDouble())
            {
                qDebug() << keys << ":" << jsonValue.toInt();
            }else if(jsonValue.isBool())
            {
                qDebug() << keys << ":" << jsonValue.toBool();
            }
            else if(jsonValue.isObject())
            {
                QJsonObject obj = jsonValue.toObject();
                QStringList subKeys = obj.keys();
                qDebug() << keys << ": {";
                for(int k = 0; k < subKeys.size(); k++)
                {
                    QString subkeys = subKeys[k];
                    QJsonValue subjsonValue = obj.value(subkeys);
                    qDebug() <<"     "<<subkeys<<":" << subjsonValue.toString();
                }
                qDebug() << " }";
            }
            else if(jsonValue.isArray())
            {
                QJsonArray arr = jsonValue.toArray();
                qDebug() << keys << ": [";
                for(int j = 0;j < arr.size();j++)
                {
                    QJsonValue va = arr[j];

                    if(va.isString())
                    {
                        qDebug() << "       " << va.toString();
                    }

                }
                qDebug() << " ]";
            }
        }
    }
}

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

//    writeJsonToFile("D:\\QtProject\\jsonDemo\\testJsonArray.json");
    readJsonFromFile("D:\\QtProject\\jsonDemo\\test.json");
    return a.exec();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值