以下JSON应该在qt中读取,并作为键值对存储在数组中,因此我可以使用以下值:
json:
{
"datasources":[
{"id":1,"name":"TPS Position"},
{"id":2,"name":"TPS Timer"},
{"id":3,"name":"Lateral G"},
{"id":4,"name":"Longitudal G"},
{"id":5,"name":"Z"},
{"id":6,"name":"AFR"}
]}
我阅读了QT JSON savegame示例,但是我不知道如何读取键值。 这是我拥有的qt代码,但我不知道如何继续:
jsonFileValue = datasourcesjson.readAll();
datasourcesjson.close();
QJsonDocument m_DataSourceDocument = QJsonDocument::fromJson(jsonFileValue.toUtf8());
QJsonObject m_DataSourceObject = m_DataSourceDocument.object();
QJsonArray m_DataSourceArray = m_DataSourceObject.value(QString("datasources")).toArray();
qWarning() << m_DataSourceArray;
这是输出:
QJsonArray([{"id":1,"name":"TPS Position"},{"id":2,"name":"TPS Timer"},{"id":3,"name":"Lateral G"},{"id":4,"name":"Longitudal G"},{"id":5,"name":"Z"},{"id":6,"name":"AFR"}])
但是如何在数组中将这些数据用于QMap这样的程序中以获取键值?
答案 0 :(得分:0)
基本上,您可以遍历QJsonArray并从每个成员中获取QJsonObject。然后,您可以通过其键获取值。 QJsonObject :: value()返回QJsonValue类型的对象,可以将其转换为QString或int。
QJsonDocument m_DataSourceDocument = QJsonDocument::fromJson(jsonFileValue.toUtf8());
QJsonObject m_DataSourceObject = m_DataSourceDocument.object();
QJsonArray m_DataSourceArray = m_DataSourceObject.value(QString("datasources")).toArray();
qWarning() << m_DataSourceArray;
for (const auto m_DataSource : m_DataSourceArray)
// or instead of c++11 for-loop, you can use foreach, like:
// foreach (const QJsonValue& m_DataSource, m_DataSourceArray)
{
QJsonObject m_DataSourceObject = m_DataSource.toObject();
qWarning() << "Id: "
<< m_DataSourceObject.value("id").toInt()
<< " and name: "
<< m_DataSourceObject.value("name").toString();
}
输出:
Id: 1 and name: "TPS Position"
Id: 2 and name: "TPS Timer"
Id: 3 and name: "Lateral G"
Id: 4 and name: "Longitudal G"
Id: 5 and name: "Z"
Id: 6 and name: "AFR"
如果您不想遍历所有成员,还可以从数组读取单个值。
以下代码显示第二个成员的“名称”值:
qWarning() << m_DataSourceArray.at(1).toObject().value("name").toString();
输出:
"TPS Timer"
希望这会有所帮助。