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;
+            }
         }
     }