其他分享
首页 > 其他分享> > QJson总结

QJson总结

作者:互联网

JSON

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。JSON的本质是字符串,使用文本来表示一个JS对象的信息。一个JSON对象是一个键(key)-值(value)对的列表,其中key是可唯一表示的字符串,value由一个QJsonValue对象表示。

QJsonObject

在QT中,一个QJsonObject类代表一个JSON对象,其中包含了一至多对键值对,是一个QString到QJsonValue的印射,有下面这些常见的成员函数:

函数 作用
QStringList keys() const 返回该QJsonObject对象的key序列
QJsonValue take(const QString &key) 返回key对应的值,若不存在该key,则返回的QJsonValue的类型为QJsonValue::Undefined,也可以用[]直接访问,二者等价
int QJsonObject::size() const 返回键值对的个数
iterator QJsonObject::insert(const QString &key, const QJsonValue &value) 插入一个键值对,返回对应迭代器,若key已经存在,则会覆盖
void QJsonObject::remove(const QString &key) 移除键为key的键值对
iterator QJsonObject::find(const QString &key) 查看键为key的键值对是否存在,返回迭代器,若不存在有j.find(key) == j.end()
bool contains(const QString &key) const 判断是否存在键为key的键值对

QJsonValue

QJsonValue代表JSON中的值,包括以下几种:

利用下面的函数判断QJsonValue的值的类型

通过上面的判断函数后,可以通过下面函数将QJsonValue的值转化为对应的值

构建QJsonObject

可以利用参数列表直接构造:

    QJsonArray array({1,2,3,4});
    QJsonObject object//利用initializer_list构造
         {
             {"property1", 1},
             {"property2", 2},
             {"property3",array}
         };

也可以利用insert的形式构造,上面的object与下面等价:

    QJsonObject object;
    QJsonArray array({1,2,3,4});
    object.insert("property1",1);
    object.insert("property2",2);
    object.insert("property3",array);

从文件中读取json并解析

QJsonDocument类提供了读写JSON文档的方式,
我们可以通过该类的方法QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)将一个json文档转换成QJsonDocument类,再利用object()将QJsonDocument转化为QJSonObject然后处理

       QString fileName ="test.json";
       QFile loadFile(fileName);
       if(!loadFile.open(QIODevice::ReadOnly))
       {
           qDebug() << "could't open projects json";
           return 0;
       }
       QByteArray allData = loadFile.readAll();//读取文件
       loadFile.close();
       QJsonParseError json_error;//结合QJSonParseError进行解析
       QJsonDocument doc(QJsonDocument::fromJson(allData, &json_error));//将QByteArray转换为QJsonDocument
       if(json_error.error != QJsonParseError::NoError)//存在error
       {
           qDebug() << "exist json error!";
           qDebug()<<json_error.errorString();//打印存在的error
           return 0;
       }
       QJsonObject object = doc.object();
       //事先知道json的格式,进行以下解析
       QString name;
       int age;
       QString time;
       if(object.contains("name"))//先判断存不存在
           if(object.take("name").isString())//在判断QJsonValue的类型匹不匹配
               name=object.take("name").toString();
        if(object.contains("age"))
            if(object.take("age").isDouble())
                age=object.take("age").toInt();
        if(object.contains("time"))
            if(object.take("time").isString())
                time=object.take("time").toString();
        //其他的解析过程也类似...
               

标签:总结,QJsonValue,const,QJsonObject,bool,QString,key,QJson
来源: https://www.cnblogs.com/chinono/p/13973056.html