- QJsonDocument: 提供一種讀取和寫入JSON文檔的方法,可以通過它的的成員函數array()或object()檢索文檔中包含的數組或對象,然後讀取JSON資料,或者修改資料。
- QJsonObject: 封裝了一個JSON對象, 可以使用它的成員函數size()、insert()和remove()來對修改JSON資料.
- QJsonArray: 封裝了一個JSON數組,用來實作JSON數組的
1.解析JSON-示例
注意:JSON中的Key命名不能相同,否則的話會覆寫掉,比如:
{
"FLAG": 1,
"FLAG": "example"
}
最終隻能讀取到FLAG的"example"值.
json檔案示例内容如下:
{
"FLAG": 1,
"NAME": "example",
"ARRAYS":
[
{
"Name": "array1",
"String": "哈哈哒1"
},
{
"Name": "array2",
"String": "哈哈哒2"
},
{
"Name": "array3",
"String": "哈哈哒3"
},
{
"Name": "array4",
"String": "哈哈哒4"
}
]
}
程式如下:
bool parseJson()
{
//打開檔案
QFile file(QApplication::applicationDirPath()+"/1.json");
if(!file.open(QIODevice::ReadOnly)) {
qDebug() << "File open failed!";
} else {
qDebug() <<"File open successfully!";
}
QJsonParseError *error=new QJsonParseError;
QJsonDocument jdc=QJsonDocument::fromJson(file.readAll(),error);
//判斷檔案是否完整
if(error->error!=QJsonParseError::NoError)
{
qDebug()<<"parseJson:"<<error->errorString();
return false;
}
QJsonObject obj = jdc.object(); //擷取對象
qDebug() <<"object size:"<<obj.size();
QStringList list = obj.keys();
foreach (QString key, list) {
if(obj[key].isString())
{
qDebug()<<"key:"<<key<<"value:"<<obj[key].toString();
}
else if(obj[key].isArray() && key =="ARRAYS")
{
QJsonArray arr = obj[key].toArray();
for(int i=0;i<arr.count();i++)
{
QJsonObject arrObj= arr[i].toObject();
qDebug()<<"key:\"Name\""<<"value:"<<arrObj["Name"].toString();
qDebug()<<"key:\"String\""<<"value:"<<arrObj["String"].toString();
}
}
}
return true;
}
列印如下:

寫JSON-示例
代碼如下:
bool writeJson()
{
//打開檔案
QFile file(QApplication::applicationDirPath()+"/1.json");
if(!file.open(QIODevice::WriteOnly)) {
qDebug() << "File open failed!";
} else {
qDebug() <<"File open successfully!";
}
QJsonDocument jdoc;
QJsonObject obj;
QJsonArray arr;
for(int i=1;i<5;i++)
{
QJsonObject Member; //定義數組成員
Member["Name"] = QString("array%1").arg(i);
Member["String"] = QString("哈哈哒%1").arg(i);
arr.append(Member);
}
obj["ARRAYS"] = arr;
obj["NAME"] ="example";
obj["FLAG"] ="1";
jdoc.setObject(obj);
file.write(jdoc.toJson(QJsonDocument::Indented)); //Indented:表示自動添加/n回車符
file.close();
}
檔案儲存如下: