一、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数据格式的问题或者转换过程中出现异常导致的。