qt 对于解析和修改json 的支持是挺不错的,相信大家已经看到了很多对于qt 解析json的文章,现在分享一下qt是如何修改json数据的
先看一个json:
{
"A":{"AA":11},
"B":[{"BB":["bbb"]}],
"C":{"CC":["ccc"]}
}
首先是一个大的json对象,以下包含了一个小的对象A,一个数组对象数组B,对象数组C
先将他们解析出来
QByteArray byte;
QFile file(file_path);
if(file.exists()){
file.open(QIODevice::ReadOnly|QIODevice::Text);
byte=file.readAll();
file.close();
}
else
{
cout<<"openFileError"<<endl;;
}
QJsonParseError json_error;
QJsonDocument jsonDoc(QJsondocument::fromJson(byte,&json_error));
if(json_error.err!=QJsonParseError::NoError)
{
cout<<" json error "<<endl;
}
QJsonObject rootobj=jsonDoc.object();
//一般需要使用 rootobj.contains(xxx) 判断一下是否存在 这里我们就默认是存在的 。
QJsonObject A_obj=rootobj.value("A").toObject();
A_obj["AA"]=33;
QJsonArray B_array=rootobj.value("B").toArray();
QJsonObject B_Subobj=B_array[0].toObject();
QJsonArray b_array=B_Subobj.value("BB").toArray();
b_array.replace(0,"BBB");
B_Subobj["BB"]=b_array;
B_array.replace(0,B_Subobj);
QJsonObject C_obj=rootobj.value("C").toObject();
QJsonArray c_array=C_obj.value("CC").toArray();
c_array.replace(0,"CCC");
C_obj["CC"]=c_array;
rootobj["A"]=A_obj;
rootobj["B"]=B_array;
rootobj["C"]=C_obj;
QFile file(file_path);
if(file.exists()){
file.open(QIODevice::WriteOnly|QIODevice::Text);
jsonDoc.setObject(rootobj);
file.seek(0);
file.write(jsonDoc.toJson());
file.flush();
file.close();
}
由此就将json修改完成:
{
"A":{"AA":33},
"B":[{"BB":["BBB"]}],
"C":{"CC":["CCC"]}
}