json文件结构形式
{
"xiao1": [
{
"000100": {
"industryCode": "000100",
"industryName": "test"
}
},
{
"000101": {
"industryCode": "000100",
"industryName": "test"
}
},
{
"000103": {
"industryCode": "000100",
"industryName": "test"
}
}
],
"xiaogdsadg": [
{
"12321344": {
"industryCode": "12321344",
"industryName": "454555"
}
},
{
"54545445": {
"industryCode": "54545445",
"industryName": "454555"
}
},
{
"454454654": {
"industryCode": "454454654",
"industryName": "454555"
}
}
]
}
//判断指定项是否在json文件里
bool MainWindow:: isInJson(QString userName,QString rowId)
{
???QString val;
???QFile file;
???file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
???file.open(QIODevice::ReadOnly| QIODevice::Text);
???val = file.readAll();
???file.close();
???QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
???QJsonObject objTop1 = doc.object();
???QStringList keys = objTop1.keys();
???//用户循环
???for(int i = 0; i < keys.count();i++)
???{
???????if(keys.at(i)!= userName)
???????????continue;
???????QJsonArray arrayRows = objTop1.value(keys.at(i)).toArray();
???????//行循环
???????for(int j =0;j < arrayRows.count();j++)
???????{
???????????QJsonObject objRow = arrayRows.at(j).toObject();
???????????if(objRow.keys().at(0) == rowId)
???????????{
???????????????return true;
???????????}
???????}
???}
???return false;
}
//添加收藏
void MainWindow::addJson(QString userName, QString rowId)
{
???if(!isInJson(userName,rowId))
???{
???????bool hasUser = false;
???????QString val;
???????QFile file;
???????file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
???????file.open(QIODevice::ReadOnly| QIODevice::Text);
???????val = file.readAll();
???????file.close();
???????QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
???????QJsonObject objTop1 = doc.object();
???????QStringList keys = objTop1.keys();
???????//用户循环
???????for(int i = 0; i < keys.count();i++)
???????{
???????????if(keys.at(i) != userName)
???????????????continue;
???????????QJsonArray arrayRows = objTop1.value(keys.at(i)).toArray();
???????????QJsonObject addObj;
???????????QJsonObject addObj1;
???????????addObj1.insert("industryCode",rowId);
???????????addObj1.insert("industryName","454555");
???????????addObj.insert(rowId,addObj1);
???????????arrayRows.append(addObj);
???????????objTop1.insert(userName,arrayRows);
???????????hasUser = true;
???????????break;
???????}
???????//该用户还没有添加
???????if(!hasUser)
???????{
???????????QJsonArray arrayRows;
???????????QJsonObject addObj;
???????????QJsonObject addObj1;
???????????addObj1.insert("industryCode",rowId);
???????????addObj1.insert("industryName","444545");
???????????addObj.insert(rowId,addObj1);
???????????arrayRows.append(addObj);
???????????objTop1.insert(userName,arrayRows);
???????}
???????doc.setObject(objTop1);
???????file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
???????file.open(QIODevice::WriteOnly| QIODevice::Text);
???????file.write(doc.toJson());
???????file.close();
???}
}
//取消收藏
void MainWindow::removeJson(QString userName, QString rowId)
{
???if(isInJson(userName,rowId))
???{
???????QString val;
???????QFile file;
???????file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
???????file.open(QIODevice::ReadOnly| QIODevice::Text);
???????val = file.readAll();
???????file.close();
???????QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
???????QJsonObject objTop1 = doc.object();
???????QStringList keys = objTop1.keys();
???????//用户循环
???????for(int i = 0; i < keys.count();i++)
???????{
???????????if(keys.at(i) != userName)
???????????????continue;
???????????QJsonArray arrayRows = objTop1.value(keys.at(i)).toArray();
???????????//行循环
???????????for(int j =0;j < arrayRows.count();j++)
???????????{
???????????????QJsonObject objRow = arrayRows.at(j).toObject();
???????????????if(objRow.keys().at(0) == rowId)
???????????????{
???????????????????arrayRows.removeAt(j);
???????????????????objTop1.insert(userName,arrayRows);
???????????????????break;
???????????????}
???????????}
???????????doc.setObject(objTop1);
???????????file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
???????????file.open(QIODevice::WriteOnly| QIODevice::Text);
???????????file.write(doc.toJson());
???????????file.close();
???????????break;
???????}
???}
}
qt json操作
原文地址:https://www.cnblogs.com/tianmochou/p/9264430.html