一、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