- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 JsonArray 并想通过其“ID”搜索值。这里是存储在 QJsonArray 中的 JSON:
{
"datasources":[
{"id":1, "name":"tps-pos", "display-name":"TPS Position"},
{"id":2, "name":"tps-timer", "display-name":"TPS Timer"},
{"id":3, "name":"laterial-g", "display-name":"Lateral G"},
{"id":4, "name":"longitudal-g", "display-name":"Longitudal G"},
{"id":5, "name":"Z", "display-name":"Z"},
{"id":6, "name":"afr", "display-name":"AFR"},
{"id":135, "name":"IAT", "display-name":"Intake Air temperature"},
{"id":179, "name":"RPM", "display-name":"RPM"}
]}
我尝试了 std::find
,其中 m_list
包含应在 JSON 中找到的 id。
auto result = std::find(m_DataSourceArray.begin(),m_DataSourceArray.end(), m_list[0]);
调试时,我看到“结果”始终与 m_DataSourceArray
+ 字段迭代器相同:(调试器 View :)
result @0x7ed9e0 QJsonArray::iterator
a <8 Elemente> QJsonArray
[0] <3 Elemente> QJsonValue (Object)
[1] <3 Elemente> QJsonValue (Object)
[2] <3 Elemente> QJsonValue (Object)
[3] <3 Elemente> QJsonValue (Object)
[4] <3 Elemente> QJsonValue (Object)
[5] <3 Elemente> QJsonValue (Object)
[6] <3 Elemente> QJsonValue (Object)
[7] <3 Elemente> QJsonValue (Object)
i 8 int
最佳答案
我会创建一个新的搜索函数。喜欢:
QJsonObject findValueFromJsonArray(QJsonArray arr, QString key, int val) {
for (const auto obj : arr) {
if (obj.toObject().value(key) == val)
return obj.toObject();
}
return QJsonObject();
}
现在我可以通过 id 搜索值。
QJsonArray m_DataSourceArray = m_DataSourceObject.value(QString("datasources")).toArray();
QJsonObject obj = findValueFromJsonArray(m_DataSourceArray, "id", 10);
// Array doesn't contain a value with id 10
if (obj.isEmpty())
qDebug() << "Empty QJsonObject";
QJsonObject obj2 = findValueFromJsonArray(m_DataSourceArray, "id", 2);
if (!obj2.isEmpty())
qDebug() << "Not empty!";
qDebug() << obj2;
qDebug() << "Display-name of obj2: " << obj2.value("display-name").toString();
qDebug() << findValueFromJsonArray(m_DataSourceArray, "id", 4);
输出:
Empty QJsonObject
Not empty!
QJsonObject({"display-name":"TPS Timer","id":2,"name":"tps-timer"})
Display-name of obj2: "TPS Timer"
QJsonObject({"display-name":"Longitudal G","id":4,"name":"longitudal-g"})
当然,如果您不需要在其他地方进行搜索,则不需要创建新函数来进行搜索。
如果您需要按名称或显示名称查找值,您可以创建第二个函数。请注意 val 参数现在是 QString 类型而不是 int。
QJsonObject findValueFromJsonArray(QJsonArray arr, QString key, QString val) {
for (const auto obj : arr) {
if (obj.toObject().value(key).toString().contains(val, Qt::CaseSensitivity::CaseInsensitive))
return obj.toObject();
}
return QJsonObject();
}
现在我可以通过值的 ID 或名称搜索值:
QJsonArray m_DataSourceArray = m_DataSourceObject.value(QString("datasources")).toArray();
QJsonObject obj = findValueFromJsonArray(m_DataSourceArray, "name", "foo");
// Array doesn't contain a value with name 'foo'
if (obj.isEmpty())
qDebug() << "Empty QJsonObject";
QJsonObject obj2 = findValueFromJsonArray(m_DataSourceArray, "name", "tps-pos");
if (!obj2.isEmpty())
qDebug() << "Not empty!";
qDebug() << obj2;
qDebug() << "Display-name of obj2: " << obj2.value("display-name").toString();
qDebug() << findValueFromJsonArray(m_DataSourceArray, "id", 4);
qDebug() << findValueFromJsonArray(m_DataSourceArray, "name", "z");
qDebug() << findValueFromJsonArray(m_DataSourceArray, "display-name", "rpm");
输出:
Empty QJsonObject
Not empty!
QJsonObject({"display-name":"TPS Position","id":1,"name":"tps-pos"})
Display-name of obj2: "TPS Position"
QJsonObject({"display-name":"Longitudal G","id":4,"name":"longitudal-g"})
QJsonObject({"display-name":"Z","id":5,"name":"Z"})
QJsonObject({"display-name":"RPM","id":179,"name":"RPM"})
关于c++ - 在 QJsonArray 中搜索项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364083/
如何根据 QJsonArray 的子级之一实现自定义排序? 我有基于此 JSON 的 QJsonArray 玩具: "toys": [ { "type": "teddy",
我有以下 JsonArray 并想通过其“ID”搜索值。这里是存储在 QJsonArray 中的 JSON: { "datasources":[ {"id":1, "name":"tps-
我有以下 JsonArray 并想通过其“ID”搜索值。这里是存储在 QJsonArray 中的 JSON: { "datasources":[ {"id":1, "name":"tps-
我想从 QJsonArray 中删除所有元素,但我遇到的麻烦比我想象的要多得多。这是我的代码: void Assessment::clearQJsonArray(QJsonArray *array)
我像这样向 QJsonObjects 插入很多不同的值: //gender inserted to QJsonObject gender QJsonObject gender; gender.inse
假设我有一个类型的函数: bool sortJson(QJsonArray &); 应该对 QJsonArray 进行排序(并返回真)如果所有成员都是 double .我知道我可以建立一个辅助 QVe
假设我有一个名为 groupBoxFlags(JSON 名称:flags)的 checkable QGroupBox,它有四个 QCheckBox将 checkBoxFlag1 命名为 checkBo
我正在尝试创建一个 json 文件,在其中我将 QjsonObjects 插入到唯一的一个 QJsonArray 中,我得到的是每个 QjsonObject 都在一个独立的 QJsonArray 中,
我有一个对象,我使用下面的代码将它序列化为 JSON(另请参阅结构): struct RegisterItem { RegisterType Type = RegisterType::Read
我正在尝试从 QString 获取数组。 我在网上得到了将字符串转换为 QJsonDocument 的建议,但是,我的数组是空的。 QString string = "\"person\":\"{\"
我有这 2 个变量,我想将数据转换为 dataToString。 QJSonArray data; Qstring dataToString; 数据中有一个巨大的 json,如: { "pro
我正在寻找一个最小的完整的可执行qt或c++代码示例来解析和编写以下Json代码: { "FirstName": "John", "LastName": "Doe", "Mid
目前,我正在遍历一个 vector ,以便将其转换为 QJsonArray: QJsonArray toJson(const std::vector& myVec) { QJsonArray
使用老式循环,我可以深入研究 QJsonArray并且,在下面的示例中,为每个数组项添加元素“foo”以及现有元素“bar”的内容。如何使用基于 C++11 范围的 for 来做到这一点? // QJ
我正在制作支持 Qt TreeView 和 Qt Json 的 Json 格式数据编辑器。我想将 QJsonObject 或 QJsonArray 引用参数传递给函数。 这个有效: void make
我正在使用 Qt5。我正在尝试从 json 对象获取值。这是我试图从中获取数据的 json 对象的样子: { "success": true, "properties": [
我是一名优秀的程序员,十分优秀!