一、Qt解析JSON數據
//JSON數據
{
"name":"Alice",
"age":18,
"hobby":["reading","painting"]
}
//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
int age = jsonObj.value("age").toInt();
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
QString hobby = val.toString();
qDebug()<<hobby;
}
以上代碼通過Qt解析一段JSON數據,並從中獲取名字、年齡和愛好信息,並輸出到控制台上。
二、Qt解析JSONObject無輸出
//JSON數據
{
"name":"Alice",
"info":{
"age":18,
"hobby":["reading","painting"]
}
}
//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
QJsonObject infoObj = jsonObj.value("info").toObject();
int age = infoObj.value("age").toInt();
QJsonArray hobbyArr = infoObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
QString hobby = val.toString();
qDebug()<<hobby;
}
以上代碼通過Qt解析一個包含JSONObject的JSON數據。如果jsonObj.value(“info”)沒有轉成一個對象,則原因是JSON數據格式的問題或者轉換過程出現異常導致的。
三、Qt解析JSON文件
//JSON數據,保存在example.json文件中
{
"name":"Alice",
"age":18,
"hobby":["reading","painting"]
}
//Qt代碼
QFile file("example.json");
if(!file.open(QIODevice::ReadOnly))
{
qDebug()<<"打開文件失敗";
return;
}
QByteArray jsonData = file.readAll();
file.close();
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
int age = jsonObj.value("age").toInt();
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
QString hobby = val.toString();
qDebug()<<hobby;
}
以上代碼通過Qt解析example.json文件中的JSON數據,並從中獲取名字、年齡和愛好信息,並輸出到控制台上。
四、Qt解析JSONArray
//JSON數據
["reading","painting"]
//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isArray())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonArray hobbyArr = jsonDoc.array();
foreach(QJsonValue val , hobbyArr)
{
QString hobby = val.toString();
qDebug()<<hobby;
}
以上代碼通過Qt解析一個JSONArray,並輸出其中的數據到控制台。
五、Qt解析JSON字元串
//JSON字元串
QString strJson = "{\"name\":\"Alice\",\"age\":18,\"hobby\":[\"reading\",\"painting\"]}";
//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(strJson.toUtf8());
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
int age = jsonObj.value("age").toInt();
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
QString hobby = val.toString();
qDebug()<<hobby;
}
以上代碼通過Qt解析一個JSON字元串,並從中獲取名字、年齡和愛好信息,並輸出到控制台上。
六、Qt解析JSON沒有輸出
//JSON數據
{
"name":"Alice",
"score": {
"Math": 90,
"English": 80
},
"hobby":["reading","painting"]
}
//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
qDebug()<<name;
int mathScore = jsonObj.value("score").toObject().value("Math").toInt();
qDebug()<<"Math Score:"<<mathScore;
int englishScore = jsonObj.value("score").toObject().value("English").toInt();
qDebug()<<"English Score:"<<englishScore;
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
QString hobby = val.toString();
qDebug()<<hobby;
}
以上代碼通過Qt解析一個包含嵌套JSONObject的JSON數據,如果沒有值輸出,那麼原因有二:jsonObj.value(“score”)沒有轉成一個對象、JSON數據格式的問題。
七、Qt解析JSONList
在Qt中解析JSONList需要首先引入第三方庫QJsonArray,下面是對JSONList的解析示例。
//JSON數據
[
{
"name":"Alice",
"age":18
},
{
"name":"Bob",
"age":22
}
]
//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isArray())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonArray jsonArray = jsonDoc.array();
foreach(QJsonValue val , jsonArray)
{
QJsonObject jsonObj = val.toObject();
QString name = jsonObj.value("name").toString();
int age = jsonObj.value("age").toInt();
qDebug()<<name<<age;
}
八、Qt解析JSONArray需要三方庫嗎
Qt自帶的QJsonDocument、QJsonObject、QJsonArray類可以解析任何合法的JSON數據,不需要引入其他第三方庫。
九、Qt解析JSONObject輸出為空
//JSON數據
{
"name":"Alice",
"score": {
"Math": 90,
"English": 80
},
"hobby":["reading","painting"]
}
//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
qDebug()<<"JSON數據格式錯誤";
return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
qDebug()<<name;
QJsonValue scoreVal = jsonObj.value("score");
if(scoreVal.isNull() || !scoreVal.isObject())
{
qDebug()<<"Score數據格式錯誤";
return;
}
QJsonObject scoreObj = scoreVal.toObject();
int mathScore = scoreObj.value("Math").toInt();
qDebug()<<"Math Score:"<<mathScore;
int englishScore = scoreObj.value("English").toInt();
qDebug()<<"English Score:"<<englishScore;
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
QString hobby = val.toString();
qDebug()<<hobby;
}
如果JSON對象中某一個值為null或者值類型不匹配,則原因可能是JSON數據格式的問題或者轉換過程中出現異常導致的。
原創文章,作者:UJHX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/145388.html
微信掃一掃
支付寶掃一掃