Добавить QJsonObjects в QJsonArray

Я пытаюсь создать файл json, в который я вставляю объекты QjsonObject только в один массив QJsonArray. Я получаю, что каждый объект QjsonObject находится в независимом массиве QJsonArray, но я хочу, чтобы они были в одном массиве.

эта функция вызывается каждый раз, когда нажимается кнопка сохранения, и так создаются мои объекты QJsonObject.

void List::insertDefect(const QString &parentDefect,const QString &defect,const QString &positions)const{
    QString filename =createListDefect();
    QFile file(filename);
    file.open(QIODevice::Append | QIODevice::Text);
    QJsonObject defectObject;
    defectObject.insert("parentDefect", QJsonValue::fromVariant(parentDefect));
    defectObject.insert("defect", QJsonValue::fromVariant(defect));
    defectObject.insert("positions", QJsonValue::fromVariant(positions));
    QJsonArray listArray;
    listArray.push_back(defectObject);
    QJsonDocument doc(listArray);
    file.write(doc.toJson(QJsonDocument::Indented));}

и вот пример сгенерированного файла JSON:

[
    {
        "defect": "MISSING, DAMAGED",
        "parentDefect": "SEAT BELTS",
        "positions": "F | RB | "
    }
]
[
    {
        "defect": "RIGIDITY,CORROSION,DISTORTION",
        "parentDefect": "CHASSIS OR SUB-FRAME",
        "positions": "B | RC | RB | "
    }
]

и я пытаюсь сделать так, чтобы это выглядело так:

[
    {
        "defect": "MISSING, DAMAGED",
        "parentDefect": "SEAT BELTS",
        "positions": "F | RB | "
    },


    {
        "defect": "RIGIDITY,CORROSION,DISTORTION",
        "parentDefect": "CHASSIS OR SUB-FRAME",
        "positions": "B | RC | RB | "
    }
]

1 ответ

Решение

Вы создаете QJsonArray listArray; как локальная переменная внутри метода, таким образом, переменная массива уничтожается после каждого вызова метода, и каждый объект сохраняется в отдельном новом массиве, необходимо создать массив вне метода, чтобы он сохранялся во всех вызовах, а затем добавлять объекты к нему и обновите документ.

QJsonArray listArray;

void List::insertDefect()
....
Другие вопросы по тегам