1、写JSON文件:
头文件:
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
//fileName为路径
if (!fileName.isNull())
{
// 以读写方式打开路径下文件,若该文件不存在则会自动创建
QFile file(fileName);
if(!file.open(QIODevice::ReadWrite))
{
qDebug() << "File open error";
}
else
{
qDebug() <<"File open!";
}
// 清空文件中的原有内容
file.resize(0);
QJsonObject jsonObject[7];
for(int i = 0; i < 7; i++)
{
jsonObject[i].insert("name", QString::number(i+1));
jsonObject[i].insert("age", i+18);
}
// 使用QJsonArray添加值,并写入文件
QJsonArray jsonArray;
QJsonObject jsonObject1;
jsonObject1.insert("data0", QJsonValue(jsonObject[0]));
jsonObject1.insert("data1", QJsonValue(jsonObject[1]));
jsonObject1.insert("data2", QJsonValue(jsonObject[2]));
jsonObject1.insert("data3", QJsonValue(jsonObject[3]));
jsonObject1.insert("data4", QJsonValue(jsonObject[4]));
jsonObject1.insert("data5", QJsonValue(jsonObject[5]));
jsonObject1.insert("data6", QJsonValue(jsonObject[6]));
jsonArray.append(QJsonValue(jsonObject1));
//生成json数据
QJsonDocument jsonDoc;
//jsonDoc.setArray(jsonArray);//这个也可以
jsonDoc.setObject(jsonObject1);
file.write(jsonDoc.toJson());
file.close();
}
2、读JSON文件
//file_name为文件路径
if (!file_name.isNull())
{
QFile file(file_name);
if(!file.open(QIODevice::ReadWrite))
{
qDebug() << "File open error";
exit(1);
}
else
{
qDebug() <<"File open!";
}
//直接读取
QJsonParseError jsonParserError;
QJsonDocument jsonDocument = QJsonDocument::fromJson( file.readAll(), &jsonParserError );
if ( !jsonDocument.isNull() && jsonParserError.error == QJsonParseError::NoError )
{
if ( jsonDocument.isObject() )
{
QJsonObject jsonObject = jsonDocument.object();
if ( jsonObject.contains( "postsNum" ) && jsonObject.value( "postsNum" ).isDouble() )
{
qDebug() << "postsNum is " << jsonObject.value( "postsNum" ).toInt() << "\n";
}
}
}
//读取一个对象
QByteArray data = file.readAll();
//使用json文件对象加载字符串
QJsonDocument doc=QJsonDocument::fromJson(data);
//判断是否对象
if(doc.isObject())
{
//把json文档转换为json对象
QJsonObject obj=doc.object();
QJsonValue value=obj.value("Fileinfo");
if(value.isObject())
{
QJsonObject subobj=value.toObject();
//取值
QString ip=subobj.value("app").toString();
QString port=subobj.value("app_version").toString();
qDebug()<<ip<<port;
}
}
//读取数组多个对象
QJsonParseError jsonParserError;
QJsonDocument jsonDocument = QJsonDocument::fromJson( file.readAll(), &jsonParserError );
if ( !jsonDocument.isNull() && jsonParserError.error == QJsonParseError::NoError )
{
if ( jsonDocument.isObject() )
{
QJsonObject jsonObject = jsonDocument.object();
if ( jsonObject.contains( "Fx" ) )
{
QJsonArray jsonArray = jsonObject.value( "Fx" ).toArray();
for ( int i = 0; i < jsonArray.size(); i++ )
{
if ( jsonArray[ i ].isObject() )
{
QJsonObject jsonObjectPost = jsonArray[ i ].toObject();
if ( jsonObjectPost.contains( "count1" ) &&
jsonObjectPost.contains( "count2" ) &&
jsonObjectPost.contains( "count3" ) &&
jsonObjectPost.value( "count1" ).isDouble() &&
jsonObjectPost.value( "count2" ).isString() &&
jsonObjectPost.value( "count3" ).isString() )
{
//读取
//jsonObjectPost.value( "count1" ).toInt();
//jsonObjectPost.value( "count2" ).toString().toStdString();
//jsonObjectPost.value( "count3" ).toString().toStdString();
}
}
}
}
}
}
file.close();
}
QString fileName = QFileDialog::getSaveFileName(this,
tr("Save"),
tr(""),
tr("*.json"));
QString file_name= QFileDialog::getOpenFileName(this,
tr("Open File"),
tr(""),
"Files(*.json)",
0);