1、需引入的头文件
#include <QJsonObject> //json对象类,用于数据传输的对象,类似于map的键值对
#include <QJsonDocument> //json文档
#include <QJsonArray> //json数组,可以放标准数据类型,也可以放json数据
注:json的兼容性很好,目前网络中传输数据绝大多数都是用json文件
2、一个json对象可以存储多个键值对。
查询结果很多时,可以使用json数组来存放json对象
使用案列:
QJsonArray Database::selectData()
{
QJsonArray array; //用来返回的json数组
QString cmd = "select * from user;";
QSqlQuery query;
if(query.exec(cmd))
{
while(query.next()) //next函数返回bool类型
{
//没执行一次next返回一行数据
QJsonObject json;
//表的属性 id name pswd
QString id = query.value(0).toString(); //当前行的第一列
QString name = query.value(1).toString();
QString pswd = query.value(2).toString();
/*
* 一个属性当作一个键值对
*/
json.insert("id", id); //json对象插入键值对
json.insert("name", name);
json.insert("passwd", pswd);
array.append(json); //往数组之中加入json对象
}
return array;
}else{
qDebug() << "查询失败" << query.lastError();
}
return array; //做全局返回
}
要在本地查看json数组的内容:
qDebug() << jsonArray;
3、json支持随意嵌套
json转换流程:QJsonArray---》QJsonObject---》QJsonDocument---》QByteArray
json转换的使用案列:(学会json转换)※※※※※※
QJsonArray array = db.selectData();
/*省略了嵌套json和转换成QByteArray
* 也省略了反向转换 和 提起 QJsonArray
*/
for(int i = 0; i < array.size(); i++)
{
QJsonObject json = array.at(i).toObject(); //json数组元素转换成json对象
QString id = json.value("id").toString();
QString name = json.value("name").toString();
QString pswd = json.value("passwd").toString();
qDebug() << id << " " << name << " " << pswd;
}