QT5解析嵌套Json
1、/* CJson.h */
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
class CJson
{
public:
CJson();
QString decode(const QByteArray byteArray, QString key);
QString getValueBykey(QJsonObject obj, QString key);
private:
};
2、/* CJson.cpp */
#include <iostream>
#include <QStringList>
#include "cjson.h"
CJson::CJson()
{
// Do nothing.
}
QString CJson::decode(const QByteArray byteArray, QString key)
{
// Check input
if ( byteArray.isEmpty() || 0 == key.compare(""))
{
return "";
}
QString str = "";
QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray, &jsonError);
if(jsonError.error == QJsonParseError::NoError)
{
if(jsonDoc.isObject())
{
QJsonObject obj = jsonDoc.object();
// Loop get value according the key world
str = getValueBykey(obj, key);
}
}
return str;
}
QString CJson::getValueBykey(QJsonObject obj, QString key)
{
QString rst = "";
QStringList strList = obj.keys();
for (int i = 0; i < obj.size(); i++)
{
QJsonValue val = obj.value(strList.at(i));
if ( strList.at(i) == key && val.isString())
{
rst = val.toString();
}
else if (val.isObject())
{
rst = getValueBykey(val.toObject(), key);
}
}
return rst;
}