云计算百科
云计算领域专业知识百科平台

QT高阶日记02

QJSON数据序列化。

json数据类型包括
int,float,string,bool array[],object,null
[12,12.36,"a",true,null]
一个json对像里,可以包括不同的数据类型。
json一个元素,包括"key":value,key在同级不能有相同的。
json能嵌套,也就是json的对像里面,还可以包括json对像。

{
"a":{"b":1}
"b":{"c":2
    "d":["a","b","c"]
    }
}
在QT中,有四大类用来操作Json
QJsonDocument,//基本上是utf-8格式来处理数据。
QJsonArray,//是一个值列表。
QJsonObject,//是一个键值对列表。key是唯一的
QJsonValue//封装了JSON支持的其他数据类型。
包括QJsonValue,QJsonObject,QJsonArray,char,QLatin1String,QString,qint64,int,
double,bool QJsonValue :: Type type等等

一、QJsonValue
对数据类型判定方法有如下:
bool isArray();
bool isBool();
bool isDouble();
bool isNull();
bool isObject();
isString();
isUndefined();
//还有转换方法:
toArray(QJsonArray arry);
toArray();
toBool();
toDouble();
toInt();
toObject(QJsonOjbect obj);
toObject();
toString();
toString(QString str);
toVariant();
//不家返回类型
QJsonValue :: Type type()//反回该JsonValue的类型。

二、QJsonObject
 "key":QJsonValue,"key1":QJsonValue,"key2":QJsonValue
//添加数据的方法有
insert(QString key,QJsonValue value);
//数量
count();
size();
length();等
//设置数据
QJsonValue  vv=QJsonValue :: value(key);
QJsonValue  vv=QJsonValue :: [key];
//删除
remove(key);
take(key);
//查找
intrator一个QJsonValue列表 QJsonObject ::  find(key);
bool QJsonObject :: contains(key);

//遍历
QStringList QJsonObject :: keys();
iterator迭代器函数遍历

三、QJonArray
数组类
插入数据有
append//尾插
insert//位插
prepend//插入头
push_back//插入尾
push_front//插入头
//数量
count();
size();
//加入QJsonArray的都是QJsonValue类型
//取出数据
at(int i);
first();
last();
//上面得到的Copy份
arr[int i];//原件

//删除数据
erase(iterator i);
pop_back();
pop_front();
removeAt(int i)
removeFirst();
removeLast();
takeAt(int i);//有返回值 

//遍历同上QJsonOjbect

四、QJsonDocument类型

构造
QJsonDocument(QJsonDocument && other);
QJsonDocument(QJsonDocument & other);
QJsonDocument(QJsonArray & array);
QJsonDocument(QJsonObject & obj);

array()返回数组QJsonArray
isArray()?
isEmpty()?
isNull()?
isObject()?
//设置内容
setArray(QJsonArray &arry);
setObject(QJsonObject &obj);

array();
object();

//转换
QByteArray toJson();
QByteArray toJson(QJsonDocument :: JsonFormat format);
QByteArray toBinaryData();

//能过静态方法转换为JSON对像
QJsonDocument fromJson(const QByteArray &json,QJsonParseError * error=nullptr);
QJsonDocument fromBinaryData(QByteArray &data);
QJsonDocument fromVariant(const QVariant & var);

//示例如下:

引用
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>
#include<QFile>
void WriteJson()
{
    QJsonObject obj;
    obj.insert("key","data");
    ……
    //完成内容添加之后
    QDocument doc(obj);
    QByteArray json=doc.toJson();
    QFile file("文件路径.json")
    file.open(QFile :: WriteOnly);
    file.write(json);
    file.close();
}

void ReadJson()
{
    QFile file("文件路径.json");
    file.open(QFile :: ReadOnly);
    QByteArray all=file.readAll();
    file.close();
    QJsonDocument doc=QJsonDocument :: fromJson(all);
    QJsonObject obj=doc.object();
    QStringList keys=obj.keys();
    for(int i=0;i<keys.size();i++)
    {
        QJsonValue value=obj.value(keys.at(i));
        value.isBool/isArray/isString/isDouble/isObject等等判定数据类型。
        特别注意的是,如果是isObject则又可以拆分 它为了一个QJsonObject obj1=value.toObject();
        //又可以判定键数量又可以递归循环。
    }
    
}

 

赞(0)
未经允许不得转载:网硕互联帮助中心 » QT高阶日记02
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!