【发布时间】:2019-01-14 15:08:18
【问题描述】:
我正在尝试在 Qt 应用程序中解析 Json 文件,但我卡在了一个点上。 我有一个 json 文件,其中包含具有属性的数组。现在我有一个 Category 类,它有一个 items 作为成员变量。现在我想解析属性并创建一个唯一的类别对象,在这个对象下我想添加属性。
我通过硬编码实现了这一点:
auto vehicle = std::make_unique<Item>("Coordinates");
vehicle->addEntry(std::make_unique<PropertyItem>("TODO", "x", PropertyType::FLOAT, false, *vehicle.get()));
categories.emplace_back(std::move(vehicle));
void Model::loadItemsFromJson() {
// Vehicle
QJsonObject obj = loadJsonFile(":/jsonfiles/vehicle.json");
QJsonArray properties = obj["properties"].toArray();
/// No idea here how to achive
}
我应该更改 Json 以便更好地处理还是可以轻松实现? 谢谢
--------------编辑-------- -
Now my json looks like this:
{
"General": [{
"Address": "TODO",
"Readonly": false
},
],
"Coordinates": [{
"Address": "TODO",
"Readonly": false
}
]
]
}
和我的实现:
QJsonObject obj = loadJsonFile(":/jsonfiles/vehicle.json");
QVariantMap map = obj.toVariantMap();
for (auto& m : map.keys()) {
// How to create objects??
}
【问题讨论】:
-
硬编码数据似乎与 JSON 数据不匹配。 “test2”“x”是否对应“世界坐标”“X”?
-
已更改。 test2 实际上是地址,WorldCoordinates 是类别。像这样:ScenarioPropertyItem(const QString &address, const QString &displayName, PropertyType type, bool readOnly, CategoryItem &parentItem);
-
如果您要定义 JSON 的结构,我建议它与对象的结构相匹配。
{"Categories":{ "General" : [{"Address" : "TODO", "Name" : "Name", "Type" : "string", "ReadOnly" : "true"}, ...], "World Coordinates" : [...] } -
是的,我可以,您能否就创建硬编码中提到的对象提供建议。
-
QVariantMap map = obj.toVariantMap(); for (auto& m : map.keys()) { std::make_unique
(m); qDebug()