diff --git a/src/UI/PropertyModel.cc b/src/UI/PropertyModel.cc index 568c06ace13fc4d5528e4e516d1b11d46bcd6cde..fc4d3ea74f5ea6f123fdad06dd25dadbf5377eb0 100644 --- a/src/UI/PropertyModel.cc +++ b/src/UI/PropertyModel.cc @@ -99,12 +99,34 @@ PropertyModel::Item::fromJson(const QJsonValue &value, PropertyModel::Item *pare } else if (value.isArray()) { - for (int index = 0; const QJsonValue v : value.toArray()) { - Item *child = fromJson(v, root); - child->setKey(QString::number(index)); - child->setType(v.type()); - root->appendChild(child); - ++index; + // With arrays with one object per index, treat them as ordered QJsonObject + bool isOrderedQJsonObject = true; + for (const QJsonValue v : value.toArray()) { + if (!v.isObject() || v.toObject().count() != 1) + isOrderedQJsonObject = false; + } + + if (isOrderedQJsonObject) { + for (const QJsonValue v : value.toArray()) { + // `count == 1` was already checked + const QString key = v.toObject().keys().at(0); + const QJsonValue val = v.toObject().value(key); + + Item *child = fromJson(val, root); + child->setKey(key); + child->setType(val.type()); + root->appendChild(child); + } + } + + else { + for (int index = 0; const QJsonValue v : value.toArray()) { + Item *child = fromJson(v, root); + child->setKey(QString::number(index)); + child->setType(v.type()); + root->appendChild(child); + ++index; + } } }