QT 读取 JSON 文件并存储和检索值
Posted
技术标签:
【中文标题】QT 读取 JSON 文件并存储和检索值【英文标题】:QT Reading a JSON file and storing and retriving values 【发布时间】:2016-08-04 06:34:21 【问题描述】:我正在尝试在 QT 中读取如下所示的 json 文件。有人可以建议一种从 json 对象获取值并将它们存储在单独的容器或数组中的方法,例如 test_cell2.CELLS[0] 或某种方式,以便也可以处理嵌套,并且我可以在解析文件后轻松访问它们
"test_cells2" :
"CELLS" :
"cell_0" :
"prettyName" : "cell_1",
"CELLS" :
"cell_1" :
"prettyName" : "cell_1",
"type" : "default",
,
,
,
"cell_1" :
"prettyName" : "cell_1",
"type" : "default",
,
"cell_2" :
"type" : "text cell ko",
,
"cell_3" :
"prettyName" : "cell_3",
"type" : "default",
,
"cell_4" :
"data" :
"settings" :
"EXEC_PARAMETERS" :
"defaultQueue" : "batch",
"environment" :
"blabla" : "blabla2",
,
,
,
,
"type" : "parallel_test",
,
,
,
【问题讨论】:
How to create/read/write JSon files in Qt5的可能重复 【参考方案1】:看看这个函数
QJsonDocument::fromJson(QByteArray)
http://doc.qt.io/qt-5/qjsondocument.html#fromJson
然后使用QJsonDocument::object()
,你可以使用键来获取你的值:
QJsonDocument doc = QJsonDocument::fromJson(QByteArray);
QJsonObject root = doc.object();
foreach(QJsonValue element, root["CELLS"].toArray())
QJsonObject node = element.toObject();
node["whatEver"];
【讨论】:
【参考方案2】:如果您的 Qt 版本 > 5.5,请检查 QJSonDocument,http://doc.qt.io/qt-5/qjsondocument.html。
一个例子:
// Just read it from a file... or copy here
const QString yourJSON = "...";
const QJsonDocument jsonDoc = QJsonDocument::fromJson(yourJSON.toLocal8Bit());
const QVariantMap map = jsonDoc.toVariant().toMap();
要注意 CELLS 在 CELLS 中的嵌套,首先加载您的 CELLS 数组:
// Start read your parameter
const QVariant testCells2 = map["test_cells2"].toVariant();
const QVariantList CELLS = testCells2.toList();
// Now, we have a list available CELLS, check one be one
foreach (const QVariant& cell, CELLS)
const QVariantMap wrapped = cell.toMap();
qDebug() << "Pretty Name: " << wrapped["prettyName"].toString();
qDebug() << "Type: " << wrapped["type"].toString();
const hasList = !wrapped["CELLS"].toList().isEmpty();
qDebug() << "Has child list? << hasList;
if (hasList)
// Start another loop to check the child list.
【讨论】:
如何照顾 CELLS 在 CELLS 中的嵌套 我添加了一些更改以使用 QVariant、QVariantList、QVariantMap,您也可以使用 QJsonObject。以上是关于QT 读取 JSON 文件并存储和检索值的主要内容,如果未能解决你的问题,请参考以下文章
Qt 和 JSON 资源解析 - 空 QJSONDocument