История изменений
Исправление unC0Rr, (текущая версия) :
Я написал для этого пару методов просто:
void updatePath(QJsonObject& object, const QStringList& keys,
std::function<void(QJsonValueRef)> transformer) {
Q_ASSERT(keys.length());
QJsonValueRef valueRef = object[keys.first()];
if (keys.length() == 1) {
transformer(valueRef);
} else {
QJsonObject innerObject = valueRef.toObject();
updatePath(innerObject, keys.mid(1), transformer);
valueRef = innerObject;
}
}
void setPath(QJsonObject& object, const QStringList& keys,
const QJsonValue& value) {
updatePath(object, keys, [value](QJsonValueRef v) { v = value; });
}
Тогда можно написать так:
setPath(jsonObject, {"param1", "count"}, 11)
Исходная версия unC0Rr, :
Я написал для этого пару методов просто:
void updatePath(QJsonObject& object, const QStringList& keys,
std::function<void(QJsonValueRef)> transformer) {
Q_ASSERT(keys.length());
QJsonValueRef valueRef = object[keys.first()];
if (keys.length() == 1) {
transformer(valueRef);
} else {
QJsonObject innerObject = valueRef.toObject();
updatePath(innerObject, keys.mid(1), transformer);
valueRef = innerObject;
}
}
void setPath(QJsonObject& object, const QStringList& keys,
const QJsonValue& value) {
updatePath(object, keys, [value](QJsonValueRef v) { v = value; });
}