gpt4 book ai didi

c++ - 有没有办法使用 QJsonObject 在整个 json 文件中找到一个键?

转载 作者:行者123 更新时间:2023-11-28 01:21:21 27 4
gpt4 key购买 nike

json 层次结构中任何级别的键,我如何在不知道路径中确切键的情况下找到该键?

最佳答案

通常,这可以通过递归函数(调用自身的函数)来解决。我们首先将文档的对象传递给它,然后检查对象的键。如果没有找到键,我们将对每个键的 应用相同的函数。如果传递了一个数组,我们应该遍历它。

QJsonValue findKey(const QString& key, const QJsonValue& value) {
if (value.isObject()) {
const QJsonObject obj = value.toObject();
if (obj.contains(key))
return obj.value(key); // return 'early' if object contains key

for (const auto& value : obj) {
QJsonValue recurse = findKey(key, value); // call itself, forwarding a value
if (!recurse.isNull())
return recurse; // value found, return 'early'
}
} else if (value.isArray()) {
for (const auto& value : value.toArray()) {
QJsonValue recurse = findKey(key, value);
if (!recurse.isNull())
return recurse;
}
}

return QJsonValue(); // base case: a null value
}

int main(int argc, char *argv[])
{
QFile file(":/res/scratch.json"); // json stored in a qrc with /res/ prefix
file.open(QIODevice::ReadOnly);

if (!file.isOpen()) {
qDebug() << "error: couldn't open scratch.json";
return 0;
}

QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
qDebug() << "value:" << findKey("treasure", doc.object());
}

JSON 文件和相关输出的示例:

scratch.json:

{
"deck": [
"first mate",
"sailor",
"john muir"
],
"cabin": [
{
"name": "lamp"
},
{
"name": "treasure chest",
"items": {
"diamonds": 3,
"silver": 5,
"gold": 10,
"safebox": {
"treasure": "shiny"
}
}
}
]
}

输出:

value: QJsonValue(string, "shiny")

关于c++ - 有没有办法使用 QJsonObject 在整个 json 文件中找到一个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122822/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com