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();
}