2

可能与如何在不使用副本的情况下更改 QJson 层次结构中的 QJsonObject 值有关?,但答案基本上是,它不起作用,也许从那以后事情发生了变化。给出以下签名:

void addToJson(const QStringList& path, QJsonObject& target, const QJsonObject& object)

它应该基于pathand add构建一个 JSON 对象object,例如:

  path: obj,obj2,obj3
  ->
      "obj": {
        "obj2": {
          "obj3": {
          }
        }
      }

object将被添加到 obj3。

目前的实现是:

void addToJson(const QStringList& path, QJsonObject& target, const QJsonObject& object)
{
    if(path.isEmpty())
    {
        target = object;
        return;
    }

    QString objName = path.first();

    QJsonObject tmpObj = target[objName].toObject();
    addToJson(path.mid(1), tmpObj, object);
    target[objName] = tmpObj;
}

是否可以编写以避免副本(基本上每次迭代都会有很多深层副本)?

[]操作员给你 a ,QJsonValueRef什么是好的,但如果你想给它添加一些东西,你需要将它QJsonObject再次转换为 a 而不是 a QJsonValueRef,这会破坏一切。

4

0 回答 0