1、将对应的字符串生成QJsonDocument对象。
2、判断QJsonDocument对象是QJsonObject还是QJsonArray类型。
3、如果是QJsonObject类型,获取一个QJsonObject对象,然后根据QJsonObject的api函数进行解析。
4、如果是QJsonArray类型,获取一个QJsonArray对象,然后根据QJsonArray的api函数进行解析。
5、从以上步骤获取对象后取得QJsonValue类型的数据。
6、迭代分解数据获取各个值。
例子:
#include <QtCore/QCoreApplication>
#include <QtDebug>
#include <QString>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonValue>
#include <QJsonParseError>
#include <QJsonObject>
#include <QStringList>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString jsonStr = "{\"name\":\"mxq\",\"number\":1,\"array\":[23,\"asdf\",true]}";
qDebug()<<"test json!";
QJsonParseError jsonErr;
QJsonDocument myjsonDoc1 = QJsonDocument::fromJson(jsonStr.toLatin1(),&jsonErr);
if (jsonErr.error == QJsonParseError::NoError)
{
if (myjsonDoc1.isEmpty())
{
qDebug()<<"the json is empty!";
}
if (myjsonDoc1.isObject())
{
qDebug()<<"json is object";
QJsonObject jobj = myjsonDoc1.object();
QStringList jsonkeylist = jobj.keys();
qDebug()<<"jsonkeylist="<<jsonkeylist.count();
for (int i=0;i<jsonkeylist.count();i++)
{
qDebug()<<jsonkeylist.at(i)<<"\n";
}
QJsonObject::iterator it = jobj.begin();
while(it != jobj.end())
{
switch (it.value().type())
{
case QJsonValue::String:
qDebug()<<"type is String!";
qDebug()<<it.key()<<"="<<it.value().toString();
break;
case QJsonValue::Array:
{
qDebug()<<"type is array!";
qDebug()<<it.key()<<"="<<it.value().toArray();
QJsonArray subarray = it.value().toArray();
qDebug()<<"subarray count = "<<subarray.count();
qDebug()<<"index 1 ="<<subarray.at(0).toDouble();
qDebug()<<"index 2 ="<<subarray.at(1).toString();
qDebug()<<"index 3 ="<<subarray.at(2).toBool();
break;
}
case QJsonValue::Bool:
qDebug()<<"type is bool!";
qDebug()<<it.key()<<"="<<it.value().toBool();
break;
case QJsonValue::Double:
qDebug()<<"type is Double!";
qDebug()<<it.key()<<"="<<it.value().toDouble();
break;
case QJsonValue::Object:
qDebug()<<"type is Object!";
qDebug()<<it.key()<<"="<<it.value().toObject();
break;
case QJsonValue::Null:
qDebug()<<"type is null!";
qDebug()<<it.key()<<"=null";
break;
case QJsonValue::Undefined:
qDebug()<<"type is Undefined!";
break;
}
it++;
}
}
}
return a.exec();
}
以上为本人的一个测试程序,main.c的内容。