LINUX.ORG.RU

История изменений

Исправление 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; });
}