QT读写JSON文件

JSON的样式

1,Json对象

JSON的样式是可以相互嵌套的,作为程序的配置文件,JSON的嵌套不要太多。

{
“age”:“24”,
“name”:“sdf”,
“like”:[“you”,“he”,“she”],//嵌套数组
"person”:{“father”,“mother”}//嵌套对象
`}

2,Json数组

[1,2,3,{“1”:“1”,“2”,“2”,“3”:“3”},[1,2,3,4,5,6,7,8],9]

QT中对JSON处理

需要包含的头文件:

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

1,写入JSON文件

//1.对象写入JSON文件

///参数:文件的名字
void writeJsonFile(char* filename)
{
    QJsonObject object
    {
        {"property1", 1},
        {"property2", 2}
    };

    QJsonObject Json;

    //对象插入值
    Json.insert("name","doudou");
    Json.insert("age",12);

    //插入子对象
    QJsonObject subJon;
    subJon.insert("city","benjing");
    Json.insert("now",subJon);

    //插入数组
    QJsonArray array;
    array.insert(0,1);
    array.insert(1,2);
    Json.insert("num",array);

    Json.insert("z",object);


    //QJsonObject转成QJsonDocument(const QJsonObject &object)
    QJsonDocument jsonDoc(Json);

    //将QJsonDocument转成QByteArry
    QByteArray byteArray=jsonDoc.toJson();

    //文件操作QFile(const QString &name, QObject *parent)
    QFile file(filename);

    //打开文件
    file.open(QFileDevice::WriteOnly);

    //写文件
    file.write(byteArray);
}

//2.数组写入文件

void writeJsonFile2(char* filename)
{
    QJsonArray Json,subJson;
    subJson.insert(0,0);
    subJson.insert(1,1);
    subJson.insert(2,2);
    subJson.insert(3,3);
    subJson.append(4);
    subJson.append(5);
    Json.insert(0,subJson);

    QJsonObject object;
    object.insert("a","a");
    object.insert("b","b");
    object.insert("c","c");
    object.insert("d","d");

    Json.append(object);

    //QJsonObject转成QJsonDocument(const QJsonObject &object)
    QJsonDocument jsonDoc(Json);

    //将QJsonDocument转成QByteArry
    QByteArray byteArray=jsonDoc.toJson();

    //文件操作QFile(const QString &name, QObject *parent)
    QFile file(filename);

    //打开文件
    file.open(QFileDevice::WriteOnly);

    //写文件
    file.write(byteArray);
}

2,解析JSON文件

void readJsonFromFile(char* filename)
{

    QFile file;
    //打开的文件名
    file.setFileName(filename);
    //打开以读文件
    file.open(QIODevice::ReadOnly);


    //读文件所有的数据
    QByteArray bytearray=file.readAll();

    //QByteArray转为QJsonDocument
    QJsonDocument jsonDoc;
    jsonDoc.fromJson(bytearray);

    //QJsonDocument转为QJsonObject还是QJsonArray
    if(jsonDoc.isObject())
    {
        QJsonObject json=jsonDoc.object();
        //获取对象中的所有的值
        QStringList keys =json.keys();
        //通过迭代器访问元素
        for(QList<QString>::iterator i=keys.begin();i<keys.end();i++)
        {
            QChar* k=i->begin();
            qDebug()<<k;
        }
        
        //通过函数来访问
        for(int i=0;i<keys.size();i++)
        {
            QString key=keys.at(i);
            //根据key值获取value值
            QJsonValue jsonvalue=json.value(key);
            QString key1=keys[i];
            QJsonValue jsonvalue1=json[key];
            //判断value值的类型
            if(jsonvalue.isString())
            {
                qDebug()<<jsonvalue.toString();
            }
            else if(jsonvalue.isDouble())
            {
                qDebug()<<jsonvalue.toInt();
            }
            else if(jsonvalue.isDouble())
            {
                qDebug()<<jsonvalue.toBool();
            }
            else if(jsonvalue.isObject())
            {

                QJsonObject obj=jsonvalue.toObject();
                for(int j=0;j<obj.size();j++)
                {
                QString subkey=keys.at(i);
                //根据key值获取value值
                QJsonValue subjsonvalue=json.value(key);
                qDebug()<<subjsonvalue.toString();
                }
            }
            else if(jsonvalue.isArray())
            {
                QJsonArray array=jsonvalue.toArray();
                for(int j=0;j<array.size();j++)
                {
                QString subkey=keys.at(i);
                //根据key值获取value值
                QJsonValue subjsonvalue=json.value(key);
                if(subjsonvalue.isString())
                {
                    qDebug()<<subjsonvalue.toString();
                }
                }
            }
        }
    }
    if(jsonDoc.isArray())
    {
        QJsonArray arr=jsonDoc.array();
    }
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值