举例如下:
#include <QFile>
#include <QObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonParseError>
QString readJsonStr(const QString &pathname)
{
//打开json文件
QFile file(pathname);
if (!file.open(QFile::ReadOnly | QFile::Text))
{
return "";
}
//读取json文件的全部内容
QTextStream stream(&file);
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
stream.setEncoding(QStringConverter::Utf8);
#else
stream.setCodec("UTF-8"); //设置写入编码是UTF8
#endif
QString str = stream.readAll();
file.close();
//得到内容
return str;
}
bool getJsonObj(const QString &json) //输入的json字符串是从共享内存读出来的
{
QJsonDocument doc;
QJsonParseError error;
doc = QJsonDocument::fromJson(json.toLatin1(), &error);
if (doc.isNull() || !doc.isObject() || error.error != QJsonParseError::NoError)
{
qDebug() << "GetImagehead error:" << error.errorString();
return false;
}
QJsonObject obj = doc.object();
QStringList keys = obj.keys();
foreach (const QString &key, keys)
{
//处理每个键名
}
if (obj.contains("key"))
{
//存在该键
}
else
{
//不存在该键
}
double x = obj["x"].toDouble();
double y = obj["y"].toDouble();
double d = obj["d"].toDouble();
struct Pos
{
double dx;
double dy;
};
std::vector<Pos> vt;
QJsonArray j = obj["list"].toArray();
for (int i = 0; i < j.count(); i++)
{
QJsonObject ev = j.at(i).toObject();
Pos s;
s.dx = ev["dx"].toDouble();
s.dy = ev["dy"].toDouble();
vt.push_back(s);
}
bool base = json.contains("\"target\":\"base\"");
return true;
}
---
GitHub - miloyip/json-tutorial: 从零开始的 JSON 库教程
GitHub - Tencent/rapidjson: A fast JSON parser/generator for C++ with both SAX/DOM style API
JSON for Modern C++